From f2392f7e5cb64df507907a627e47e850d640ea0e Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Thu, 26 Oct 2023 22:45:56 -0500 Subject: [PATCH] SDK update generated by liblab --- .devcontainer/devcontainer.json | 2 +- README.md | 46 +- examples/pom.xml | 4 +- .../src/main/java/47/one0/examples/Main.java | 17 + pom.xml | 2 +- src/main/java/47/one0/Configuration.java | 9 + src/main/java/47/one0/Environment.java | 14 + src/main/java/47/one0/PlexSDK.java | 92 + .../java/47/one0/exceptions/ApiException.java | 56 + .../ArgumentCannotBeNullException.java | 19 + src/main/java/47/one0/hooks/CustomHook.java | 1 + src/main/java/47/one0/hooks/model/Hook.java | 27 + .../java/47/one0/hooks/model/Request.java | 89 + .../java/47/one0/hooks/model/Response.java | 62 + .../java/47/one0/http/ActivitiesClient.java | 13 + src/main/java/47/one0/http/ButlerClient.java | 16 + src/main/java/47/one0/http/HubsClient.java | 13 + src/main/java/47/one0/http/LibraryClient.java | 23 + src/main/java/47/one0/http/LogClient.java | 14 + src/main/java/47/one0/http/MediaClient.java | 14 + .../java/47/one0/http/ModelConverter.java | 76 + .../java/47/one0/http/PlaylistsClient.java | 20 + .../47/one0/http/ResponseWithHeaders.java | 22 + src/main/java/47/one0/http/SearchClient.java | 14 + .../java/47/one0/http/SecurityClient.java | 13 + src/main/java/47/one0/http/ServerClient.java | 19 + .../java/47/one0/http/SessionsClient.java | 15 + src/main/java/47/one0/http/UpdaterClient.java | 14 + src/main/java/47/one0/http/VideoClient.java | 13 + .../http/interceptors/ApiKeyInterceptor.java | 37 + .../DefaultHeadersInterceptor.java | 36 + .../http/interceptors/RetryInterceptor.java | 37 + .../one0/http/util/HttpArgumentConverter.java | 42 + .../java/47/one0/http/util/HttpHeaders.java | 84 + src/main/java/47/one0/http/util/HttpUrl.java | 102 + src/main/java/47/one0/models/BaseModel.java | 75 + src/main/java/47/one0/models/Download.java | 11 + src/main/java/47/one0/models/Force.java | 11 + .../one0/models/GetButlerTasksResponse.java | 272 ++ .../47/one0/models/GetDevicesResponse.java | 275 ++ .../one0/models/GetMyPlexAccountResponse.java | 205 ++ .../47/one0/models/GetOnDeckResponse.java | 851 ++++++ .../one0/models/GetRecentlyAddedResponse.java | 1045 ++++++++ .../one0/models/GetSearchResultsResponse.java | 1132 ++++++++ .../models/GetServerActivitiesResponse.java | 366 +++ .../models/GetServerCapabilitiesResponse.java | 413 +++ .../models/GetServerIdentityResponse.java | 181 ++ .../47/one0/models/GetServerListResponse.java | 275 ++ .../models/GetTranscodeSessionsResponse.java | 323 +++ .../java/47/one0/models/IncludeDetails.java | 11 + src/main/java/47/one0/models/Level.java | 14 + src/main/java/47/one0/models/MinSize.java | 11 + .../java/47/one0/models/OnlyTransient.java | 11 + .../java/47/one0/models/PlaylistType.java | 13 + src/main/java/47/one0/models/README.md | 90 + src/main/java/47/one0/models/Scope.java | 11 + .../java/47/one0/models/SecurityType.java | 11 + src/main/java/47/one0/models/Skip.java | 11 + src/main/java/47/one0/models/Smart.java | 11 + src/main/java/47/one0/models/State.java | 13 + src/main/java/47/one0/models/TaskName.java | 24 + src/main/java/47/one0/models/Tonight.java | 11 + src/main/java/47/one0/models/Type.java | 13 + src/main/java/47/one0/models/Upscale.java | 11 + .../47/one0/services/ActivitiesService.java | 56 + .../java/47/one0/services/BaseService.java | 55 + .../java/47/one0/services/ButlerService.java | 126 + .../java/47/one0/services/HubsService.java | 70 + .../java/47/one0/services/LibraryService.java | 302 +++ .../java/47/one0/services/LogService.java | 96 + .../java/47/one0/services/MediaService.java | 96 + .../47/one0/services/PlaylistsService.java | 264 ++ src/main/java/47/one0/services/README.md | 2383 +++++++++++++++++ .../java/47/one0/services/SearchService.java | 91 + .../47/one0/services/SecurityService.java | 67 + .../java/47/one0/services/ServerService.java | 166 ++ .../47/one0/services/SessionsService.java | 102 + .../java/47/one0/services/UpdaterService.java | 96 + .../java/47/one0/services/VideoService.java | 116 + src/test/java/47/one0/TestTest.java | 12 + src/test/java/47/one0/helpers/TestModel.java | 16 + .../java/47/one0/http/ModelConverterTest.java | 39 + .../java/47/one0/models/ModelOneOfTests.java | 138 + .../one0/services/ActivitiesServiceTest.java | 21 + .../47/one0/services/BaseServiceTest.java | 12 + .../47/one0/services/ButlerServiceTest.java | 27 + .../47/one0/services/HubsServiceTest.java | 21 + .../47/one0/services/LibraryServiceTest.java | 41 + .../java/47/one0/services/LogServiceTest.java | 23 + .../47/one0/services/MediaServiceTest.java | 23 + .../one0/services/PlaylistsServiceTest.java | 35 + .../47/one0/services/SearchServiceTest.java | 23 + .../47/one0/services/SecurityServiceTest.java | 21 + .../47/one0/services/ServerServiceTest.java | 33 + .../47/one0/services/SessionsServiceTest.java | 25 + .../47/one0/services/UpdaterServiceTest.java | 23 + .../47/one0/services/VideoServiceTest.java | 21 + 97 files changed, 11391 insertions(+), 27 deletions(-) create mode 100644 examples/src/main/java/47/one0/examples/Main.java create mode 100644 src/main/java/47/one0/Configuration.java create mode 100644 src/main/java/47/one0/Environment.java create mode 100644 src/main/java/47/one0/PlexSDK.java create mode 100644 src/main/java/47/one0/exceptions/ApiException.java create mode 100644 src/main/java/47/one0/exceptions/ArgumentCannotBeNullException.java create mode 100644 src/main/java/47/one0/hooks/CustomHook.java create mode 100644 src/main/java/47/one0/hooks/model/Hook.java create mode 100644 src/main/java/47/one0/hooks/model/Request.java create mode 100644 src/main/java/47/one0/hooks/model/Response.java create mode 100644 src/main/java/47/one0/http/ActivitiesClient.java create mode 100644 src/main/java/47/one0/http/ButlerClient.java create mode 100644 src/main/java/47/one0/http/HubsClient.java create mode 100644 src/main/java/47/one0/http/LibraryClient.java create mode 100644 src/main/java/47/one0/http/LogClient.java create mode 100644 src/main/java/47/one0/http/MediaClient.java create mode 100644 src/main/java/47/one0/http/ModelConverter.java create mode 100644 src/main/java/47/one0/http/PlaylistsClient.java create mode 100644 src/main/java/47/one0/http/ResponseWithHeaders.java create mode 100644 src/main/java/47/one0/http/SearchClient.java create mode 100644 src/main/java/47/one0/http/SecurityClient.java create mode 100644 src/main/java/47/one0/http/ServerClient.java create mode 100644 src/main/java/47/one0/http/SessionsClient.java create mode 100644 src/main/java/47/one0/http/UpdaterClient.java create mode 100644 src/main/java/47/one0/http/VideoClient.java create mode 100644 src/main/java/47/one0/http/interceptors/ApiKeyInterceptor.java create mode 100644 src/main/java/47/one0/http/interceptors/DefaultHeadersInterceptor.java create mode 100644 src/main/java/47/one0/http/interceptors/RetryInterceptor.java create mode 100644 src/main/java/47/one0/http/util/HttpArgumentConverter.java create mode 100644 src/main/java/47/one0/http/util/HttpHeaders.java create mode 100644 src/main/java/47/one0/http/util/HttpUrl.java create mode 100644 src/main/java/47/one0/models/BaseModel.java create mode 100644 src/main/java/47/one0/models/Download.java create mode 100644 src/main/java/47/one0/models/Force.java create mode 100644 src/main/java/47/one0/models/GetButlerTasksResponse.java create mode 100644 src/main/java/47/one0/models/GetDevicesResponse.java create mode 100644 src/main/java/47/one0/models/GetMyPlexAccountResponse.java create mode 100644 src/main/java/47/one0/models/GetOnDeckResponse.java create mode 100644 src/main/java/47/one0/models/GetRecentlyAddedResponse.java create mode 100644 src/main/java/47/one0/models/GetSearchResultsResponse.java create mode 100644 src/main/java/47/one0/models/GetServerActivitiesResponse.java create mode 100644 src/main/java/47/one0/models/GetServerCapabilitiesResponse.java create mode 100644 src/main/java/47/one0/models/GetServerIdentityResponse.java create mode 100644 src/main/java/47/one0/models/GetServerListResponse.java create mode 100644 src/main/java/47/one0/models/GetTranscodeSessionsResponse.java create mode 100644 src/main/java/47/one0/models/IncludeDetails.java create mode 100644 src/main/java/47/one0/models/Level.java create mode 100644 src/main/java/47/one0/models/MinSize.java create mode 100644 src/main/java/47/one0/models/OnlyTransient.java create mode 100644 src/main/java/47/one0/models/PlaylistType.java create mode 100644 src/main/java/47/one0/models/README.md create mode 100644 src/main/java/47/one0/models/Scope.java create mode 100644 src/main/java/47/one0/models/SecurityType.java create mode 100644 src/main/java/47/one0/models/Skip.java create mode 100644 src/main/java/47/one0/models/Smart.java create mode 100644 src/main/java/47/one0/models/State.java create mode 100644 src/main/java/47/one0/models/TaskName.java create mode 100644 src/main/java/47/one0/models/Tonight.java create mode 100644 src/main/java/47/one0/models/Type.java create mode 100644 src/main/java/47/one0/models/Upscale.java create mode 100644 src/main/java/47/one0/services/ActivitiesService.java create mode 100644 src/main/java/47/one0/services/BaseService.java create mode 100644 src/main/java/47/one0/services/ButlerService.java create mode 100644 src/main/java/47/one0/services/HubsService.java create mode 100644 src/main/java/47/one0/services/LibraryService.java create mode 100644 src/main/java/47/one0/services/LogService.java create mode 100644 src/main/java/47/one0/services/MediaService.java create mode 100644 src/main/java/47/one0/services/PlaylistsService.java create mode 100644 src/main/java/47/one0/services/README.md create mode 100644 src/main/java/47/one0/services/SearchService.java create mode 100644 src/main/java/47/one0/services/SecurityService.java create mode 100644 src/main/java/47/one0/services/ServerService.java create mode 100644 src/main/java/47/one0/services/SessionsService.java create mode 100644 src/main/java/47/one0/services/UpdaterService.java create mode 100644 src/main/java/47/one0/services/VideoService.java create mode 100644 src/test/java/47/one0/TestTest.java create mode 100644 src/test/java/47/one0/helpers/TestModel.java create mode 100644 src/test/java/47/one0/http/ModelConverterTest.java create mode 100644 src/test/java/47/one0/models/ModelOneOfTests.java create mode 100644 src/test/java/47/one0/services/ActivitiesServiceTest.java create mode 100644 src/test/java/47/one0/services/BaseServiceTest.java create mode 100644 src/test/java/47/one0/services/ButlerServiceTest.java create mode 100644 src/test/java/47/one0/services/HubsServiceTest.java create mode 100644 src/test/java/47/one0/services/LibraryServiceTest.java create mode 100644 src/test/java/47/one0/services/LogServiceTest.java create mode 100644 src/test/java/47/one0/services/MediaServiceTest.java create mode 100644 src/test/java/47/one0/services/PlaylistsServiceTest.java create mode 100644 src/test/java/47/one0/services/SearchServiceTest.java create mode 100644 src/test/java/47/one0/services/SecurityServiceTest.java create mode 100644 src/test/java/47/one0/services/ServerServiceTest.java create mode 100644 src/test/java/47/one0/services/SessionsServiceTest.java create mode 100644 src/test/java/47/one0/services/UpdaterServiceTest.java create mode 100644 src/test/java/47/one0/services/VideoServiceTest.java diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d2506d22..fbffcc9e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,7 +14,7 @@ "customizations": { "codespaces": { "openFiles": [ - "examples/src/main/java/com/plexsdk/examples/Main.java", + "examples/src/main/java/47/one0/examples/Main.java", "README.md" ] } diff --git a/README.md b/README.md index 3179d227..78d13e6e 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ If you use Maven, place the following within the tag in your pom. ```XML - com.plexsdk + 47.one0 plex-sdk 0.0.1 @@ -41,7 +41,7 @@ If you use Maven, place the following within the tag in your pom. If you use Gradle, paste the next line inside the dependencies block of your build.gradle file: ```Gradle -implementation group: "com.plexsdk", name: "PlexSDK", version: "0.0.1" +implementation group: "47.one0", name: "PlexSDK", version: "0.0.1" ``` ## Authentication @@ -60,28 +60,28 @@ PlexSDK sdk = new PlexSDK("YOUR_API_KEY", "YOUR_API_KEY_HEADER"); ## API Endpoint Services -All URIs are relative to {protocol}://{ip}:{port}. +All URIs are relative to http://10.10.10.47:32400. Click the service name for a full list of the service methods. | Service | | :------ | -|[ServerService](src/main/java/com/plexsdk/services/README.md#serverservice)| -|[MediaService](src/main/java/com/plexsdk/services/README.md#mediaservice)| -|[ActivitiesService](src/main/java/com/plexsdk/services/README.md#activitiesservice)| -|[ButlerService](src/main/java/com/plexsdk/services/README.md#butlerservice)| -|[HubsService](src/main/java/com/plexsdk/services/README.md#hubsservice)| -|[SearchService](src/main/java/com/plexsdk/services/README.md#searchservice)| -|[LibraryService](src/main/java/com/plexsdk/services/README.md#libraryservice)| -|[LogService](src/main/java/com/plexsdk/services/README.md#logservice)| -|[PlaylistsService](src/main/java/com/plexsdk/services/README.md#playlistsservice)| -|[SecurityService](src/main/java/com/plexsdk/services/README.md#securityservice)| -|[SessionsService](src/main/java/com/plexsdk/services/README.md#sessionsservice)| -|[UpdaterService](src/main/java/com/plexsdk/services/README.md#updaterservice)| -|[VideoService](src/main/java/com/plexsdk/services/README.md#videoservice)| +|[ServerService](src/main/java/47/one0/services/README.md#serverservice)| +|[MediaService](src/main/java/47/one0/services/README.md#mediaservice)| +|[ActivitiesService](src/main/java/47/one0/services/README.md#activitiesservice)| +|[ButlerService](src/main/java/47/one0/services/README.md#butlerservice)| +|[HubsService](src/main/java/47/one0/services/README.md#hubsservice)| +|[SearchService](src/main/java/47/one0/services/README.md#searchservice)| +|[LibraryService](src/main/java/47/one0/services/README.md#libraryservice)| +|[LogService](src/main/java/47/one0/services/README.md#logservice)| +|[PlaylistsService](src/main/java/47/one0/services/README.md#playlistsservice)| +|[SecurityService](src/main/java/47/one0/services/README.md#securityservice)| +|[SessionsService](src/main/java/47/one0/services/README.md#sessionsservice)| +|[UpdaterService](src/main/java/47/one0/services/README.md#updaterservice)| +|[VideoService](src/main/java/47/one0/services/README.md#videoservice)| ## API Models -[A list documenting all API models for this SDK](src/main/java/com/plexsdk//models/README.md#plexsdk-models). +[A list documenting all API models for this SDK](src/main/java/47/one0//models/README.md#plexsdk-models). ## Testing @@ -96,16 +96,16 @@ mvn clean test Your SDK may require some configuration changes. -This API is configured to use a security token for authorization. You should edit `examples/src/main/java/com/plexsdk/examples/Main.java` and paste your own tokens in place of `PLEXSDK_API_KEY` & `PLEXSDK_API_KEY_HEADER`. +This API is configured to use a security token for authorization. You should edit `examples/src/main/java/47/one0/examples/Main.java` and paste your own tokens in place of `PLEXSDK_API_KEY` & `PLEXSDK_API_KEY_HEADER`. ## Sample Usage ```Java -package com.plexsdk.examples; +package 47.one0.examples; -import com.plexsdk.exceptions.ApiException; -import com.plexsdk.PlexSDK; +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; public class Main { @@ -122,9 +122,9 @@ public class Main { ``` -Inside this directory is `examples/src/main/java/com/plexsdk/examples/Main.java`. It's a simple, "hello, world" level program to demonstate this SDK. Run `install.sh` to prepare the SDK for use. +Inside this directory is `examples/src/main/java/47/one0/examples/Main.java`. It's a simple, "hello, world" level program to demonstate this SDK. Run `install.sh` to prepare the SDK for use. -To see what other functions this SDK is capable of, look inside `src/main/java/com/plexsdk/http/*Client.java`. +To see what other functions this SDK is capable of, look inside `src/main/java/47/one0/http/*Client.java`. ## License diff --git a/examples/pom.xml b/examples/pom.xml index 7ba90ec6..c9924025 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.plexsdk + 47.one0 examples 1.0-SNAPSHOT @@ -24,7 +24,7 @@ 2.14.0-rc1 - com.plexsdk + 47.one0 PlexSDK 0.0.1 diff --git a/examples/src/main/java/47/one0/examples/Main.java b/examples/src/main/java/47/one0/examples/Main.java new file mode 100644 index 00000000..b3111d0a --- /dev/null +++ b/examples/src/main/java/47/one0/examples/Main.java @@ -0,0 +1,17 @@ +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getServerCapabilities(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} diff --git a/pom.xml b/pom.xml index dc149aed..92690fc3 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 - com.plexsdk + 47.one0 plex-sdk diff --git a/src/main/java/47/one0/Configuration.java b/src/main/java/47/one0/Configuration.java new file mode 100644 index 00000000..2ea7d10a --- /dev/null +++ b/src/main/java/47/one0/Configuration.java @@ -0,0 +1,9 @@ +package 47.one0; + +public class Configuration { + + public static final String USER_AGENT = "liblab/0.1.25 PlexSDK/0.0.1 java/1.8"; + + public static final String DEFAULT_API_KEY_HEADER = "X-Plex-Token"; + +} diff --git a/src/main/java/47/one0/Environment.java b/src/main/java/47/one0/Environment.java new file mode 100644 index 00000000..c7ea1abf --- /dev/null +++ b/src/main/java/47/one0/Environment.java @@ -0,0 +1,14 @@ +package 47.one0; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public enum Environment { + DEFAULT("http://10.10.10.47:32400"); + + private final String url; + + public String getUrl() { + return this.url; + } +} diff --git a/src/main/java/47/one0/PlexSDK.java b/src/main/java/47/one0/PlexSDK.java new file mode 100644 index 00000000..b7a95f7e --- /dev/null +++ b/src/main/java/47/one0/PlexSDK.java @@ -0,0 +1,92 @@ +package 47.one0; + +import java.util.Map; +import 47.one0.services.*; +import 47.one0.Environment; +import okhttp3.OkHttpClient; +import 47.one0.http.interceptors.DefaultHeadersInterceptor; +import 47.one0.http.interceptors.ApiKeyInterceptor; +import 47.one0.http.interceptors.RetryInterceptor; + + +public class PlexSDK { + public ActivitiesService activitiesService; +public ButlerService butlerService; +public HubsService hubsService; +public LibraryService libraryService; +public LogService logService; +public MediaService mediaService; +public PlaylistsService playlistsService; +public SearchService searchService; +public SecurityService securityService; +public ServerService serverService; +public SessionsService sessionsService; +public UpdaterService updaterService; +public VideoService videoService; + + private final ApiKeyInterceptor apiKeyInterceptor = new ApiKeyInterceptor(); + + + public PlexSDK() { +final String serverUrl = Environment.DEFAULT.getUrl(); +final OkHttpClient httpClient = new OkHttpClient.Builder() +.addInterceptor(new DefaultHeadersInterceptor()) +.addInterceptor(new RetryInterceptor()) +.addInterceptor(apiKeyInterceptor) +.build(); + +this.activitiesService = new ActivitiesService(httpClient, serverUrl); +this.butlerService = new ButlerService(httpClient, serverUrl); +this.hubsService = new HubsService(httpClient, serverUrl); +this.libraryService = new LibraryService(httpClient, serverUrl); +this.logService = new LogService(httpClient, serverUrl); +this.mediaService = new MediaService(httpClient, serverUrl); +this.playlistsService = new PlaylistsService(httpClient, serverUrl); +this.searchService = new SearchService(httpClient, serverUrl); +this.securityService = new SecurityService(httpClient, serverUrl); +this.serverService = new ServerService(httpClient, serverUrl); +this.sessionsService = new SessionsService(httpClient, serverUrl); +this.updaterService = new UpdaterService(httpClient, serverUrl); +this.videoService = new VideoService(httpClient, serverUrl); +} + +public PlexSDK(String apiKey) { +this(apiKey, null); +} + +public PlexSDK(String apiKey, String apiKeyHeader) { +this(); +setApiKey(apiKey); +setApiKeyHeader(apiKeyHeader); +} + + + public void setBaseUrl(String url) { +this.activitiesService.setBaseUrl(url); +this.butlerService.setBaseUrl(url); +this.hubsService.setBaseUrl(url); +this.libraryService.setBaseUrl(url); +this.logService.setBaseUrl(url); +this.mediaService.setBaseUrl(url); +this.playlistsService.setBaseUrl(url); +this.searchService.setBaseUrl(url); +this.securityService.setBaseUrl(url); +this.serverService.setBaseUrl(url); +this.sessionsService.setBaseUrl(url); +this.updaterService.setBaseUrl(url); +this.videoService.setBaseUrl(url); +} + + + public void setApiKey(String apiKey) { + this.apiKeyInterceptor.setApiKey(apiKey); + } + + public void setApiKeyHeader(String apiKeyHeader) { + this.apiKeyInterceptor.setApiKeyHeader(apiKeyHeader); + } + + + + +} diff --git a/src/main/java/47/one0/exceptions/ApiException.java b/src/main/java/47/one0/exceptions/ApiException.java new file mode 100644 index 00000000..47e11d15 --- /dev/null +++ b/src/main/java/47/one0/exceptions/ApiException.java @@ -0,0 +1,56 @@ +package 47.one0.exceptions; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * This is the base class for all exceptions that represent an error response from the server. + */ +public class ApiException extends RuntimeException { + private static final Map ERROR_MAP = Collections.unmodifiableMap(new HashMap() { + { + put(401, "Unauthorized"); + put(403, "Forbidden"); + put(404, "Not Found"); + put(405, "Method Not Allowed"); + put(406, "Not Acceptable"); + put(409, "Conflict"); + put(410, "Gone"); + put(500, "Internal Server Error"); + put(502, "Bad Gateway"); + put(503, "Service Unavailable"); + put(504, "Gateway Timeout"); + } + }); + + private final int statusCode; + + public ApiException(int code) { + super(getExceptionMessage(code)); + this.statusCode = code; + } + + public ApiException(String message) { + super(message); + this.statusCode = 0; + } + + public ApiException(String message, Throwable t) { + super(message, t); + this.statusCode = 0; + } + + public ApiException(int code, String message) { + super(message); + this.statusCode = code; + } + + public int getStatusCode() { + return this.statusCode; + } + + static String getExceptionMessage(int code) { + return ERROR_MAP.getOrDefault(code, "Unknown Error"); + } + } diff --git a/src/main/java/47/one0/exceptions/ArgumentCannotBeNullException.java b/src/main/java/47/one0/exceptions/ArgumentCannotBeNullException.java new file mode 100644 index 00000000..2a10d668 --- /dev/null +++ b/src/main/java/47/one0/exceptions/ArgumentCannotBeNullException.java @@ -0,0 +1,19 @@ +package 47.one0.exceptions; + +/** + * Thrown to indicate that a service method has been passed an illegal or inappropriate argument. + * For example, if a required argument is being passed as null. + */ +public class ArgumentCannotBeNullException extends RuntimeException { + + private static final String ARGUMENT_NAME_MESSAGE_FORMAT = "Required argument %s cannot be null."; + private static final String DEFAULT_MESSAGE = "Required argument cannot be null."; + + public ArgumentCannotBeNullException() { + super(DEFAULT_MESSAGE); + } + + public ArgumentCannotBeNullException(String argumentName) { + super(String.format(ARGUMENT_NAME_MESSAGE_FORMAT, argumentName)); + } +} diff --git a/src/main/java/47/one0/hooks/CustomHook.java b/src/main/java/47/one0/hooks/CustomHook.java new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/main/java/47/one0/hooks/CustomHook.java @@ -0,0 +1 @@ + diff --git a/src/main/java/47/one0/hooks/model/Hook.java b/src/main/java/47/one0/hooks/model/Hook.java new file mode 100644 index 00000000..dce9954b --- /dev/null +++ b/src/main/java/47/one0/hooks/model/Hook.java @@ -0,0 +1,27 @@ +package 47.one0.hooks.model; + +/** + * Liblab Hook interface + */ +public interface Hook { + + /** + * Is called before the request is made to the API + * @param request the request about to be made by the SDK + */ + void beforeRequest(Request request); + + /** + * Is called after the response has returned + * @param request the request that was made by the SDK + * @param response the response coming back from the API the SDK has called + */ + void afterResponse(Request request, Response response); + + /** + * Is called when an error occurs in the SDK + * @param request the request that was made by the SDK + * @param exception The Exception thrown + */ + void onError(Request request, Exception exception); +} diff --git a/src/main/java/47/one0/hooks/model/Request.java b/src/main/java/47/one0/hooks/model/Request.java new file mode 100644 index 00000000..74465afc --- /dev/null +++ b/src/main/java/47/one0/hooks/model/Request.java @@ -0,0 +1,89 @@ +package 47.one0.hooks.model; + +import 47.one0.http.ModelConverter; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import okhttp3.Headers; +import okhttp3.RequestBody; + + +/** + * Liblab's representation of a request + */ +public class Request { + private String method; + private String url; + private String body; + private Map headers; + + public Request(String method, String url, String body, Map headers) { + this.method = method; + this.url = url; + this.body = body; + this.headers = headers; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public Map getHeaders() { + return headers; + } + + public void setHeaders(Map headers) { + this.headers = headers; + } + + public static Request toHookRequest(okhttp3.Request request) { + Map hookHeaders = request + .headers() + .toMultimap() + .entrySet() + .stream() + .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().get(0))); + return new Request( + request.method(), + request.url().toString(), + request.body() != null ? Objects.requireNonNull(request.body()).toString() : "", + hookHeaders + ); + } + + public static okhttp3.Request toOkHttpRequest(Request hookRequest) { + Headers.Builder headersBuilder = new Headers.Builder(); + hookRequest.getHeaders().forEach(headersBuilder::add); + + if (hookRequest.getBody() != null && !hookRequest.getBody().isEmpty()) { + RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(hookRequest.getBody())), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); + return new okhttp3.Request.Builder().method(hookRequest.getMethod(), requestBody).headers(headersBuilder.build()).url(hookRequest.url).build(); + } else { + return new okhttp3.Request.Builder().method(hookRequest.getMethod(), null).headers(headersBuilder.build()).url(hookRequest.url).build(); + } + } +} diff --git a/src/main/java/47/one0/hooks/model/Response.java b/src/main/java/47/one0/hooks/model/Response.java new file mode 100644 index 00000000..5b18ee2b --- /dev/null +++ b/src/main/java/47/one0/hooks/model/Response.java @@ -0,0 +1,62 @@ +package 47.one0.hooks.model; + +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * Liblab's representation of a response + */ +public class Response { + private int statusCode; + private String body; + private Map headers; + + public Response(int statusCode, String body, Map headers) { + this.statusCode = statusCode; + this.body = body; + this.headers = headers; + } + + public int getStatusCode() { + return statusCode; + } + + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public Map getHeaders() { + return headers; + } + + public void setHeaders(Map headers) { + this.headers = headers; + } + + public static Response toHookResponse(okhttp3.Response response) { + + Map responseHeaders = response + .headers() + .toMultimap() + .entrySet() + .stream() + .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().get(0))); + + + return new Response( + response.code(), + response.body() != null ? Objects.requireNonNull(response.body()).toString() : null, + responseHeaders + ); + + } +} diff --git a/src/main/java/47/one0/http/ActivitiesClient.java b/src/main/java/47/one0/http/ActivitiesClient.java new file mode 100644 index 00000000..ed41296c --- /dev/null +++ b/src/main/java/47/one0/http/ActivitiesClient.java @@ -0,0 +1,13 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface ActivitiesClient { + + ResponseWithHeaders<47.one0.models.GetServerActivitiesResponse> getServerActivities() throws ApiException; + ResponseWithHeaders cancelServerActivities(String activityUUID) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/ButlerClient.java b/src/main/java/47/one0/http/ButlerClient.java new file mode 100644 index 00000000..de6db36b --- /dev/null +++ b/src/main/java/47/one0/http/ButlerClient.java @@ -0,0 +1,16 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface ButlerClient { + + ResponseWithHeaders<47.one0.models.GetButlerTasksResponse> getButlerTasks() throws ApiException; + ResponseWithHeaders startAllTasks() throws ApiException; + ResponseWithHeaders stopAllTasks() throws ApiException; + ResponseWithHeaders startTask(String taskName) throws ApiException; + ResponseWithHeaders stopTask(String taskName) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/HubsClient.java b/src/main/java/47/one0/http/HubsClient.java new file mode 100644 index 00000000..a3d2d2e4 --- /dev/null +++ b/src/main/java/47/one0/http/HubsClient.java @@ -0,0 +1,13 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface HubsClient { + + ResponseWithHeaders getGlobalHubs(Float count, Float onlyTransient) throws ApiException; + ResponseWithHeaders getLibraryHubs(Float sectionId, Float count, Float onlyTransient) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/LibraryClient.java b/src/main/java/47/one0/http/LibraryClient.java new file mode 100644 index 00000000..0c89849c --- /dev/null +++ b/src/main/java/47/one0/http/LibraryClient.java @@ -0,0 +1,23 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface LibraryClient { + + ResponseWithHeaders getFileHash(String url, Float type) throws ApiException; + ResponseWithHeaders<47.one0.models.GetRecentlyAddedResponse> getRecentlyAdded() throws ApiException; + ResponseWithHeaders getLibraries() throws ApiException; + ResponseWithHeaders getLibrary(Float sectionId, Float includeDetails) throws ApiException; + ResponseWithHeaders deleteLibrary(Float sectionId) throws ApiException; + ResponseWithHeaders getLibraryItems(Float sectionId, Float type, String filter) throws ApiException; + ResponseWithHeaders refreshLibrary(Float sectionId) throws ApiException; + ResponseWithHeaders getLatestLibraryItems(Float sectionId, Float type, String filter) throws ApiException; + ResponseWithHeaders getCommonLibraryItems(Float sectionId, Float type, String filter) throws ApiException; + ResponseWithHeaders getMetadata(Float ratingKey) throws ApiException; + ResponseWithHeaders getMetadataChildren(Float ratingKey) throws ApiException; + ResponseWithHeaders<47.one0.models.GetOnDeckResponse> getOnDeck() throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/LogClient.java b/src/main/java/47/one0/http/LogClient.java new file mode 100644 index 00000000..8085c3fb --- /dev/null +++ b/src/main/java/47/one0/http/LogClient.java @@ -0,0 +1,14 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface LogClient { + + ResponseWithHeaders logLine(Float level, String message, String source) throws ApiException; + ResponseWithHeaders logMultiLine() throws ApiException; + ResponseWithHeaders enablePaperTrail() throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/MediaClient.java b/src/main/java/47/one0/http/MediaClient.java new file mode 100644 index 00000000..3acec171 --- /dev/null +++ b/src/main/java/47/one0/http/MediaClient.java @@ -0,0 +1,14 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface MediaClient { + + ResponseWithHeaders markPlayed(Float key) throws ApiException; + ResponseWithHeaders markUnplayed(Float key) throws ApiException; + ResponseWithHeaders updatePlayProgress(String key, Float time, String state) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/ModelConverter.java b/src/main/java/47/one0/http/ModelConverter.java new file mode 100644 index 00000000..f1d74214 --- /dev/null +++ b/src/main/java/47/one0/http/ModelConverter.java @@ -0,0 +1,76 @@ +package 47.one0.http; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + +import okhttp3.Response; +import okhttp3.ResponseBody; + +public final class ModelConverter { + private final static ObjectMapper mapper = new ObjectMapper(); + + static { + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); + mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); + } + + private ModelConverter() { + } + + public static T convert(final Response response, final Class clazz) { + final ResponseBody body = response.body(); + try { + return mapper.readValue(body.string(), clazz); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static T convert(final String response, final Class clazz) { + try { + return mapper.readValue(response, clazz); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static T convert(Response response, TypeReference typeReference) { + try { + return convert(response.body().string(), typeReference); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static T convert(String response, TypeReference typeReference) { + try { + return mapper.readValue(response, typeReference); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static String modelToJson(final Object model) { + try { + return mapper.writeValueAsString(model); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/47/one0/http/PlaylistsClient.java b/src/main/java/47/one0/http/PlaylistsClient.java new file mode 100644 index 00000000..bb9a65c1 --- /dev/null +++ b/src/main/java/47/one0/http/PlaylistsClient.java @@ -0,0 +1,20 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface PlaylistsClient { + + ResponseWithHeaders createPlaylist(String title, String type, Float smart, String uri, Float playQueueID) throws ApiException; + ResponseWithHeaders getPlaylists(String playlistType, Float smart) throws ApiException; + ResponseWithHeaders getPlaylist(Float playlistID) throws ApiException; + ResponseWithHeaders updatePlaylist(Float playlistID) throws ApiException; + ResponseWithHeaders deletePlaylist(Float playlistID) throws ApiException; + ResponseWithHeaders getPlaylistContents(Float playlistID, Float type) throws ApiException; + ResponseWithHeaders addPlaylistContents(Float playlistID, String uri, Float playQueueID) throws ApiException; + ResponseWithHeaders clearPlaylistContents(Float playlistID) throws ApiException; + ResponseWithHeaders uploadPlaylist(String path, Float force) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/ResponseWithHeaders.java b/src/main/java/47/one0/http/ResponseWithHeaders.java new file mode 100644 index 00000000..b8e2d2dd --- /dev/null +++ b/src/main/java/47/one0/http/ResponseWithHeaders.java @@ -0,0 +1,22 @@ +package 47.one0.http; + +import okhttp3.Headers; + +public class ResponseWithHeaders { + private T data; + private Headers headers; + + public ResponseWithHeaders(T data, Headers headers) { + this.data = data; + this.headers = headers; + } + + public T getData() { + return data; + } + + public Headers getHeaders() { + return headers; + } + +} diff --git a/src/main/java/47/one0/http/SearchClient.java b/src/main/java/47/one0/http/SearchClient.java new file mode 100644 index 00000000..022275c9 --- /dev/null +++ b/src/main/java/47/one0/http/SearchClient.java @@ -0,0 +1,14 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface SearchClient { + + ResponseWithHeaders performSearch(String query, Float sectionId, Float limit) throws ApiException; + ResponseWithHeaders performVoiceSearch(String query, Float sectionId, Float limit) throws ApiException; + ResponseWithHeaders<47.one0.models.GetSearchResultsResponse> getSearchResults(String query) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/SecurityClient.java b/src/main/java/47/one0/http/SecurityClient.java new file mode 100644 index 00000000..55bbf252 --- /dev/null +++ b/src/main/java/47/one0/http/SecurityClient.java @@ -0,0 +1,13 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface SecurityClient { + + ResponseWithHeaders getTransientToken(String type, String scope) throws ApiException; + ResponseWithHeaders getSourceConnectionInformation(String source) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/ServerClient.java b/src/main/java/47/one0/http/ServerClient.java new file mode 100644 index 00000000..1c0ed909 --- /dev/null +++ b/src/main/java/47/one0/http/ServerClient.java @@ -0,0 +1,19 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface ServerClient { + + ResponseWithHeaders<47.one0.models.GetServerCapabilitiesResponse> getServerCapabilities() throws ApiException; + ResponseWithHeaders getServerPreferences() throws ApiException; + ResponseWithHeaders> getAvailableClients() throws ApiException; + ResponseWithHeaders<47.one0.models.GetDevicesResponse> getDevices() throws ApiException; + ResponseWithHeaders<47.one0.models.GetServerIdentityResponse> getServerIdentity() throws ApiException; + ResponseWithHeaders<47.one0.models.GetMyPlexAccountResponse> getMyPlexAccount() throws ApiException; + ResponseWithHeaders getResizedPhoto(Float width, Float height, Integer opacity, Float blur, Float minSize, Float upscale, String url) throws ApiException; + ResponseWithHeaders<47.one0.models.GetServerListResponse> getServerList() throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/SessionsClient.java b/src/main/java/47/one0/http/SessionsClient.java new file mode 100644 index 00000000..4e88dac6 --- /dev/null +++ b/src/main/java/47/one0/http/SessionsClient.java @@ -0,0 +1,15 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface SessionsClient { + + ResponseWithHeaders getSessions() throws ApiException; + ResponseWithHeaders getSessionHistory() throws ApiException; + ResponseWithHeaders<47.one0.models.GetTranscodeSessionsResponse> getTranscodeSessions() throws ApiException; + ResponseWithHeaders stopTranscodeSession(String sessionKey) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/UpdaterClient.java b/src/main/java/47/one0/http/UpdaterClient.java new file mode 100644 index 00000000..4c797202 --- /dev/null +++ b/src/main/java/47/one0/http/UpdaterClient.java @@ -0,0 +1,14 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface UpdaterClient { + + ResponseWithHeaders getUpdateStatus() throws ApiException; + ResponseWithHeaders checkForUpdates(String download) throws ApiException; + ResponseWithHeaders applyUpdates(String tonight, String skip) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/VideoClient.java b/src/main/java/47/one0/http/VideoClient.java new file mode 100644 index 00000000..af4d0054 --- /dev/null +++ b/src/main/java/47/one0/http/VideoClient.java @@ -0,0 +1,13 @@ +package 47.one0.http; + +import java.util.List; + +import 47.one0.exceptions.ApiException; + +public interface VideoClient { + + ResponseWithHeaders startUniversalTranscode(Float hasMDE, String path, Float mediaIndex, Float partIndex, String protocol, Float fastSeek, Float directPlay, Float directStream, Float subtitleSize, String subtites, Float audioBoost, String location, Float mediaBufferSize, String session, Float addDebugOverlay, Float autoAdjustQuality) throws ApiException; + ResponseWithHeaders getTimeline(Float ratingKey, String key, String state, Float hasMDE, Float time, Float duration, String context, Float playQueueItemID, Float playBackTime, Float row) throws ApiException; + + +} \ No newline at end of file diff --git a/src/main/java/47/one0/http/interceptors/ApiKeyInterceptor.java b/src/main/java/47/one0/http/interceptors/ApiKeyInterceptor.java new file mode 100644 index 00000000..f559936b --- /dev/null +++ b/src/main/java/47/one0/http/interceptors/ApiKeyInterceptor.java @@ -0,0 +1,37 @@ +package 47.one0.http.interceptors; + +import 47.one0.Configuration; +import java.io.IOException; +import lombok.Getter; +import lombok.Setter; +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +public class ApiKeyInterceptor implements Interceptor { + + @Getter + @Setter + private String apiKey; + + @Getter + @Setter + private String apiKeyHeader; + + @Override + public Response intercept(Chain chain) throws IOException { + return chain.proceed(addApiKeyToRequest(chain.request())); + } + + private Request addApiKeyToRequest(Request request) { + return this.apiKey != null && !this.apiKey.isEmpty() + ? request.newBuilder().addHeader(resolveHeader(), this.apiKey).build() + : request; + } + + private String resolveHeader() { + return this.apiKeyHeader != null && !this.apiKeyHeader.isEmpty() + ? this.apiKeyHeader + : Configuration.DEFAULT_API_KEY_HEADER; + } +} diff --git a/src/main/java/47/one0/http/interceptors/DefaultHeadersInterceptor.java b/src/main/java/47/one0/http/interceptors/DefaultHeadersInterceptor.java new file mode 100644 index 00000000..886a9aa5 --- /dev/null +++ b/src/main/java/47/one0/http/interceptors/DefaultHeadersInterceptor.java @@ -0,0 +1,36 @@ +package 47.one0.http.interceptors; + +import 47.one0.Configuration; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Request.Builder; +import okhttp3.Response; + +public class DefaultHeadersInterceptor implements Interceptor { + + private final Map defaultHeaders = new HashMap<>(); + + public DefaultHeadersInterceptor() { + defaultHeaders.put("User-Agent", Configuration.USER_AGENT); + } + + @Override + public Response intercept(Chain chain) throws IOException { + return chain.proceed(addDefaultHeadersToRequest(chain.request())); + } + + private Request addDefaultHeadersToRequest(Request request) { + if (defaultHeaders.isEmpty()) { + return request; + } + + Builder requestBuilder = request.newBuilder(); + + defaultHeaders.forEach(requestBuilder::addHeader); + + return requestBuilder.build(); + } +} diff --git a/src/main/java/47/one0/http/interceptors/RetryInterceptor.java b/src/main/java/47/one0/http/interceptors/RetryInterceptor.java new file mode 100644 index 00000000..e65cd460 --- /dev/null +++ b/src/main/java/47/one0/http/interceptors/RetryInterceptor.java @@ -0,0 +1,37 @@ +package 47.one0.http.interceptors; + +import java.io.IOException; +import java.util.stream.IntStream; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +public class RetryInterceptor implements Interceptor { + private static final int MAX_RETRIES = 3; + private static final double RETRY_DELAY = 150; + private static final int[] RETRYABLE_CODES = { 500, 503, 504 }; + @Override + public Response intercept(Chain chain) throws IOException { + // Try the request and if it fails use exponential backoff to retry + Request request = chain.request(); + Response response = chain.proceed(request); + int tryCount = 1; + while (!response.isSuccessful() && isRetryable(response) && tryCount-1 < MAX_RETRIES) { + try { + Thread.sleep((long) Math.pow(RETRY_DELAY, tryCount-1)); + } catch (InterruptedException e) { + e.printStackTrace(); + } + response.close(); + response = chain.proceed(request); + tryCount++; + } + return response; + } + + private boolean isRetryable(Response response) { + final int statusCode = response.code(); + return IntStream.of(RETRYABLE_CODES).anyMatch(x -> x == statusCode); + } +} diff --git a/src/main/java/47/one0/http/util/HttpArgumentConverter.java b/src/main/java/47/one0/http/util/HttpArgumentConverter.java new file mode 100644 index 00000000..9ad0498a --- /dev/null +++ b/src/main/java/47/one0/http/util/HttpArgumentConverter.java @@ -0,0 +1,42 @@ +package 47.one0.http.util; + + import static 47.one0.http.ModelConverter.modelToJson; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * Provides static methods to convert values (object, array, boxed types) into string representation for http url. + * Usually used for converting objects to be http url friendly (e.g. query or header parameters) + */ +public class HttpArgumentConverter { + + /** + * Converts any value (object, array, primitive) into a string representation. + * + * @param value The value (object, array or primitive) to be converted. + * @return A string representation of the input value in a format that can be used as url query or header parameter value. + */ + public static String toStringArgument(final Object value) { + if (value == null) { + return ""; + } + if ( + value instanceof String || + value instanceof Number || + value instanceof Boolean || + value instanceof Enum + ) { + return String.valueOf(value); + } + if (value instanceof List) { + List list = (List) value; + return list + .stream() + .map(HttpArgumentConverter::toStringArgument) + .collect(Collectors.joining(",")); + } + + return modelToJson(value); + } +} diff --git a/src/main/java/47/one0/http/util/HttpHeaders.java b/src/main/java/47/one0/http/util/HttpHeaders.java new file mode 100644 index 00000000..e09d0530 --- /dev/null +++ b/src/main/java/47/one0/http/util/HttpHeaders.java @@ -0,0 +1,84 @@ +package 47.one0.http.util; + + import static 47.one0.http.util.HttpArgumentConverter.toStringArgument; + + import 47.one0.exceptions.ArgumentCannotBeNullException; +import okhttp3.Headers; + +/** + * HttpHeaders represents a utility class for building HTTP headers. + */ +public class HttpHeaders { + + /** + * Private constructor to prevent direct instantiation of the class. + */ + private HttpHeaders() { + } + + /** + * Creates a new instance of the HttpHeaders.Builder. + * + * @return A new instance of HttpHeaders.Builder. + */ + public static Builder builder() { + return new Builder(); + } + + /** + * Builder class for constructing HTTP headers. + */ + public static class Builder { + + private final Headers.Builder headersBuilder; + + /** + * Constructs a new instance of the Builder. + */ + private Builder() { + this.headersBuilder = new Headers.Builder(); + } + + /** + * Adds a required header with the specified name and value to the headers' builder. + * + * @param name The name of the header. + * @param value The value of the header. + * @return The current Builder instance. + * @throws ArgumentCannotBeNullException If the value is null. + */ + public Builder addRequiredHeader(String name, Object value) + throws ArgumentCannotBeNullException { + if (value == null) { + throw new ArgumentCannotBeNullException(name); + } + this.headersBuilder.add(name, toStringArgument(value)); + + return this; + } + + /** + * Adds an optional header with the specified name and value to the headers' builder. + * + * @param name The name of the header. + * @param value The value of the header. + * @return The current Builder instance. + */ + public Builder addOptionalHeader(String name, Object value) { + if (value != null) { + this.headersBuilder.add(name, toStringArgument(value)); + } + + return this; + } + + /** + * Builds the headers using the configured values in the builder. + * + * @return The constructed Headers object. + */ + public Headers build() { + return this.headersBuilder.build(); + } + } +} diff --git a/src/main/java/47/one0/http/util/HttpUrl.java b/src/main/java/47/one0/http/util/HttpUrl.java new file mode 100644 index 00000000..54594448 --- /dev/null +++ b/src/main/java/47/one0/http/util/HttpUrl.java @@ -0,0 +1,102 @@ +package 47.one0.http.util; + +import static 47.one0.http.util.HttpArgumentConverter.toStringArgument; + +import 47.one0.exceptions.ArgumentCannotBeNullException; +import java.util.Objects; + +/** + * The HttpUrl class provides a convenient way to construct HTTP URLs with query parameters and path parameters. + */ +public class HttpUrl { + + /** + * Private constructor to prevent direct instantiation of the class. + */ + private HttpUrl() { + } + + /** + * Creates a new instance of the Builder class to start constructing an HTTP URL. + * + * @param url The base URL for the HTTP request. + * @return A new instance of the Builder class. + */ + public static Builder builder(String url) { + return new Builder(url); + } + + /** + * The Builder class provides methods to add query parameters and path parameters to an HTTP URL. + */ + public static class Builder { + + private final okhttp3.HttpUrl.Builder httpUrlBuilder; + + /** + * Constructs a new Builder instance with the specified base URL. + * + * @param url The base URL for the HTTP request. + */ + private Builder(String url) { + this.httpUrlBuilder = Objects.requireNonNull(okhttp3.HttpUrl.parse(url)).newBuilder(); + } + + /** + * Adds a required query parameter to the HTTP URL. + * + * @param name The name of the query parameter. + * @param value The value of the query parameter. + * @return The Builder instance. + * @throws ArgumentCannotBeNullException If the value is null. + */ + public Builder addRequiredQueryParameter(String name, Object value) throws ArgumentCannotBeNullException { + if (value == null) { + throw new ArgumentCannotBeNullException(name); + } + this.httpUrlBuilder.addQueryParameter(name, toStringArgument(value)); + + return this; + } + + /** + * Adds an optional query parameter to the HTTP URL. + * + * @param name The name of the query parameter. + * @param value The value of the query parameter. + * @return The Builder instance. + */ + public Builder addOptionalQueryParameter(String name, Object value) { + if (value != null) { + this.httpUrlBuilder.addQueryParameter(name, toStringArgument(value)); + } + + return this; + } + + /** + * Adds a path parameter to the HTTP URL. + * + * @param value The value of the path parameter. + * @return The Builder instance. + * @throws ArgumentCannotBeNullException If the value is null. + */ + public Builder addPathParameter(String value) throws ArgumentCannotBeNullException { + if (value == null || value.isEmpty()) { + throw new ArgumentCannotBeNullException(); + } + this.httpUrlBuilder.addPathSegment(value); + + return this; + } + + /** + * Builds the final HTTP URL. + * + * @return The constructed HTTP URL as a string. + */ + public String build() { + return this.httpUrlBuilder.build().toString(); + } + } +} diff --git a/src/main/java/47/one0/models/BaseModel.java b/src/main/java/47/one0/models/BaseModel.java new file mode 100644 index 00000000..cc9a083c --- /dev/null +++ b/src/main/java/47/one0/models/BaseModel.java @@ -0,0 +1,75 @@ +package 47.one0.models; + +import java.util.Collection; +import java.util.Set; +import java.util.stream.Collectors; +import 47.one0.http.ModelConverter; + +public abstract class BaseModel { + public abstract static class Builder { + protected static enum ValidationType { + ALL_OF, + ANY_OF, + ONE_OF, + NONE + }; + + private final ValidationType _validationType; + + protected Builder(ValidationType validationType) { + this._validationType = validationType; + } + + protected abstract Set getNonNullInstanceFieldNames(); + protected abstract Set> getRequiredFieldsGroups(); + + protected boolean isValidAllOf() { + // Check if all of the required field groups are a subset of the non-null, non-static fields. + return getNonNullInstanceFieldNames().containsAll( + getRequiredFieldsGroups().stream() + .flatMap(Collection::stream) + .collect(Collectors.toSet())); + } + + protected boolean isValidAnyOf() { + // Check if any of the required field groups are a subset of the non-null, non-static fields. + return getRequiredFieldsGroups().stream().anyMatch( + (group) -> getNonNullInstanceFieldNames().containsAll(group)); + } + + protected boolean isValidOneOf() { + // Check if the set of non-null fields match one of the required field groups. + return getRequiredFieldsGroups().contains(getNonNullInstanceFieldNames()); + } + + protected String validate() { + if (getRequiredFieldsGroups().isEmpty()) { + // Nothing to validate since there are no required fields groups. + + return null; + } + + switch (this._validationType) { + case ALL_OF: + return !isValidAllOf() ? "Object fails AllOf validation." : null; + case ANY_OF: + return !isValidAnyOf() ? "Object fails AnyOf validation." : null; + case ONE_OF: + return !isValidOneOf() ? "Object fails OneOf validation." : null; + case NONE: + default: + return !isValidOneOf() ? "Object fails required fields validation." : null; + } + } + } + + public BaseModel() { + } + + protected BaseModel(Builder builder) { + } + + public String toJson() { + return ModelConverter.modelToJson(this); + } +} diff --git a/src/main/java/47/one0/models/Download.java b/src/main/java/47/one0/models/Download.java new file mode 100644 index 00000000..e383b819 --- /dev/null +++ b/src/main/java/47/one0/models/Download.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Download { + V1("1"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/Force.java b/src/main/java/47/one0/models/Force.java new file mode 100644 index 00000000..b3c59828 --- /dev/null +++ b/src/main/java/47/one0/models/Force.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Force { + V1(1); + + public final Float label; +} diff --git a/src/main/java/47/one0/models/GetButlerTasksResponse.java b/src/main/java/47/one0/models/GetButlerTasksResponse.java new file mode 100644 index 00000000..fbd7265f --- /dev/null +++ b/src/main/java/47/one0/models/GetButlerTasksResponse.java @@ -0,0 +1,272 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetButlerTasksResponse.Builder.class) +public class GetButlerTasksResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetButlerTasksResponse.ButlerTasks.Builder.class) + public static class ButlerTasks extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetButlerTasksResponse.ButlerTasks.ButlerTask.Builder.class) + public static class ButlerTask extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("description") private java.lang.String description; + @com.fasterxml.jackson.annotation.JsonProperty("enabled") private java.lang.Boolean enabled; + @com.fasterxml.jackson.annotation.JsonProperty("interval") private java.lang.Double interval; + @com.fasterxml.jackson.annotation.JsonProperty("name") private java.lang.String name; + @com.fasterxml.jackson.annotation.JsonProperty("scheduleRandomized") private java.lang.Boolean scheduleRandomized; + @com.fasterxml.jackson.annotation.JsonProperty("title") private java.lang.String title; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetButlerTasksResponse.ButlerTasks.ButlerTask build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetButlerTasksResponse.ButlerTasks.ButlerTask buildWithoutValidation() { + return new GetButlerTasksResponse.ButlerTasks.ButlerTask(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("description") private final java.lang.String description; + @com.fasterxml.jackson.annotation.JsonProperty("enabled") private final java.lang.Boolean enabled; + @com.fasterxml.jackson.annotation.JsonProperty("interval") private final java.lang.Double interval; + @com.fasterxml.jackson.annotation.JsonProperty("name") private final java.lang.String name; + @com.fasterxml.jackson.annotation.JsonProperty("scheduleRandomized") private final java.lang.Boolean scheduleRandomized; + @com.fasterxml.jackson.annotation.JsonProperty("title") private final java.lang.String title; + + ButlerTask(Builder builder) { + super(builder); + + this.description = builder.getDescription(); + this.enabled = builder.getEnabled(); + this.interval = builder.getInterval(); + this.name = builder.getName(); + this.scheduleRandomized = builder.getScheduleRandomized(); + this.title = builder.getTitle(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("ButlerTask") private java.util.List butlerTask; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetButlerTasksResponse.ButlerTasks build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetButlerTasksResponse.ButlerTasks buildWithoutValidation() { + return new GetButlerTasksResponse.ButlerTasks(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("ButlerTask") private final java.util.List butlerTask; + + ButlerTasks(Builder builder) { + super(builder); + + this.butlerTask = builder.getButlerTask(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("ButlerTasks") private GetButlerTasksResponse.ButlerTasks butlerTasks; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetButlerTasksResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetButlerTasksResponse buildWithoutValidation() { + return new GetButlerTasksResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("ButlerTasks") private final GetButlerTasksResponse.ButlerTasks butlerTasks; + + GetButlerTasksResponse(Builder builder) { + super(builder); + + this.butlerTasks = builder.getButlerTasks(); + } +} diff --git a/src/main/java/47/one0/models/GetDevicesResponse.java b/src/main/java/47/one0/models/GetDevicesResponse.java new file mode 100644 index 00000000..574ed642 --- /dev/null +++ b/src/main/java/47/one0/models/GetDevicesResponse.java @@ -0,0 +1,275 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetDevicesResponse.Builder.class) +public class GetDevicesResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetDevicesResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetDevicesResponse.MediaContainer.Device.Builder.class) + public static class Device extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("clientIdentifier") private java.lang.String clientIdentifier; + @com.fasterxml.jackson.annotation.JsonProperty("createdAt") private java.lang.Double createdAt; + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("name") private java.lang.String name; + @com.fasterxml.jackson.annotation.JsonProperty("platform") private java.lang.String platform; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetDevicesResponse.MediaContainer.Device build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetDevicesResponse.MediaContainer.Device buildWithoutValidation() { + return new GetDevicesResponse.MediaContainer.Device(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("clientIdentifier") private final java.lang.String clientIdentifier; + @com.fasterxml.jackson.annotation.JsonProperty("createdAt") private final java.lang.Double createdAt; + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("name") private final java.lang.String name; + @com.fasterxml.jackson.annotation.JsonProperty("platform") private final java.lang.String platform; + + Device(Builder builder) { + super(builder); + + this.clientIdentifier = builder.getClientIdentifier(); + this.createdAt = builder.getCreatedAt(); + this.id = builder.getId(); + this.name = builder.getName(); + this.platform = builder.getPlatform(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("Device") private java.util.List device; + @com.fasterxml.jackson.annotation.JsonProperty("identifier") private java.lang.String identifier; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetDevicesResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetDevicesResponse.MediaContainer buildWithoutValidation() { + return new GetDevicesResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("Device") private final java.util.List device; + @com.fasterxml.jackson.annotation.JsonProperty("identifier") private final java.lang.String identifier; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + + MediaContainer(Builder builder) { + super(builder); + + this.device = builder.getDevice(); + this.identifier = builder.getIdentifier(); + this.size = builder.getSize(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetDevicesResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetDevicesResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetDevicesResponse buildWithoutValidation() { + return new GetDevicesResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetDevicesResponse.MediaContainer mediaContainer; + + GetDevicesResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/GetMyPlexAccountResponse.java b/src/main/java/47/one0/models/GetMyPlexAccountResponse.java new file mode 100644 index 00000000..329b17a6 --- /dev/null +++ b/src/main/java/47/one0/models/GetMyPlexAccountResponse.java @@ -0,0 +1,205 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetMyPlexAccountResponse.Builder.class) +public class GetMyPlexAccountResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetMyPlexAccountResponse.MyPlex.Builder.class) + public static class MyPlex extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("authToken") private java.lang.String authToken; + @com.fasterxml.jackson.annotation.JsonProperty("mappingError") private java.lang.String mappingError; + @com.fasterxml.jackson.annotation.JsonProperty("mappingState") private java.lang.String mappingState; + @com.fasterxml.jackson.annotation.JsonProperty("privateAddress") private java.lang.String privateAddress; + @com.fasterxml.jackson.annotation.JsonProperty("privatePort") private java.lang.Double privatePort; + @com.fasterxml.jackson.annotation.JsonProperty("publicAddress") private java.lang.String publicAddress; + @com.fasterxml.jackson.annotation.JsonProperty("publicPort") private java.lang.Double publicPort; + @com.fasterxml.jackson.annotation.JsonProperty("signInState") private java.lang.String signInState; + @com.fasterxml.jackson.annotation.JsonProperty("subscriptionActive") private java.lang.Boolean subscriptionActive; + @com.fasterxml.jackson.annotation.JsonProperty("subscriptionFeatures") private java.lang.String subscriptionFeatures; + @com.fasterxml.jackson.annotation.JsonProperty("subscriptionState") private java.lang.String subscriptionState; + @com.fasterxml.jackson.annotation.JsonProperty("username") private java.lang.String username; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetMyPlexAccountResponse.MyPlex build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetMyPlexAccountResponse.MyPlex buildWithoutValidation() { + return new GetMyPlexAccountResponse.MyPlex(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("authToken") private final java.lang.String authToken; + @com.fasterxml.jackson.annotation.JsonProperty("mappingError") private final java.lang.String mappingError; + @com.fasterxml.jackson.annotation.JsonProperty("mappingState") private final java.lang.String mappingState; + @com.fasterxml.jackson.annotation.JsonProperty("privateAddress") private final java.lang.String privateAddress; + @com.fasterxml.jackson.annotation.JsonProperty("privatePort") private final java.lang.Double privatePort; + @com.fasterxml.jackson.annotation.JsonProperty("publicAddress") private final java.lang.String publicAddress; + @com.fasterxml.jackson.annotation.JsonProperty("publicPort") private final java.lang.Double publicPort; + @com.fasterxml.jackson.annotation.JsonProperty("signInState") private final java.lang.String signInState; + @com.fasterxml.jackson.annotation.JsonProperty("subscriptionActive") private final java.lang.Boolean subscriptionActive; + @com.fasterxml.jackson.annotation.JsonProperty("subscriptionFeatures") private final java.lang.String subscriptionFeatures; + @com.fasterxml.jackson.annotation.JsonProperty("subscriptionState") private final java.lang.String subscriptionState; + @com.fasterxml.jackson.annotation.JsonProperty("username") private final java.lang.String username; + + MyPlex(Builder builder) { + super(builder); + + this.authToken = builder.getAuthToken(); + this.mappingError = builder.getMappingError(); + this.mappingState = builder.getMappingState(); + this.privateAddress = builder.getPrivateAddress(); + this.privatePort = builder.getPrivatePort(); + this.publicAddress = builder.getPublicAddress(); + this.publicPort = builder.getPublicPort(); + this.signInState = builder.getSignInState(); + this.subscriptionActive = builder.getSubscriptionActive(); + this.subscriptionFeatures = builder.getSubscriptionFeatures(); + this.subscriptionState = builder.getSubscriptionState(); + this.username = builder.getUsername(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MyPlex") private GetMyPlexAccountResponse.MyPlex myPlex; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetMyPlexAccountResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetMyPlexAccountResponse buildWithoutValidation() { + return new GetMyPlexAccountResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MyPlex") private final GetMyPlexAccountResponse.MyPlex myPlex; + + GetMyPlexAccountResponse(Builder builder) { + super(builder); + + this.myPlex = builder.getMyPlex(); + } +} diff --git a/src/main/java/47/one0/models/GetOnDeckResponse.java b/src/main/java/47/one0/models/GetOnDeckResponse.java new file mode 100644 index 00000000..6fcd26a1 --- /dev/null +++ b/src/main/java/47/one0/models/GetOnDeckResponse.java @@ -0,0 +1,851 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetOnDeckResponse.Builder.class) +public class GetOnDeckResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetOnDeckResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetOnDeckResponse.MediaContainer.Metadata.Builder.class) + public static class Metadata extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetOnDeckResponse.MediaContainer.Metadata.Guid.Builder.class) + public static class Guid extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.String id; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetOnDeckResponse.MediaContainer.Metadata.Guid build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetOnDeckResponse.MediaContainer.Metadata.Guid buildWithoutValidation() { + return new GetOnDeckResponse.MediaContainer.Metadata.Guid(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.String id; + + Guid(Builder builder) { + super(builder); + + this.id = builder.getId(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetOnDeckResponse.MediaContainer.Metadata.Media.Builder.class) + public static class Media extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetOnDeckResponse.MediaContainer.Metadata.Media.Part.Builder.class) + public static class Part extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetOnDeckResponse.MediaContainer.Metadata.Media.Part.Stream.Builder.class) + public static class Stream extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("default_") private java.lang.Boolean _default; + @com.fasterxml.jackson.annotation.JsonProperty("bitDepth") private java.lang.Double bitDepth; + @com.fasterxml.jackson.annotation.JsonProperty("bitrate") private java.lang.Double bitrate; + @com.fasterxml.jackson.annotation.JsonProperty("chromaLocation") private java.lang.String chromaLocation; + @com.fasterxml.jackson.annotation.JsonProperty("chromaSubsampling") private java.lang.String chromaSubsampling; + @com.fasterxml.jackson.annotation.JsonProperty("codec") private java.lang.String codec; + @com.fasterxml.jackson.annotation.JsonProperty("codedHeight") private java.lang.Double codedHeight; + @com.fasterxml.jackson.annotation.JsonProperty("codedWidth") private java.lang.Double codedWidth; + @com.fasterxml.jackson.annotation.JsonProperty("colorRange") private java.lang.String colorRange; + @com.fasterxml.jackson.annotation.JsonProperty("displayTitle") private java.lang.String displayTitle; + @com.fasterxml.jackson.annotation.JsonProperty("extendedDisplayTitle") private java.lang.String extendedDisplayTitle; + @com.fasterxml.jackson.annotation.JsonProperty("frameRate") private java.lang.Double frameRate; + @com.fasterxml.jackson.annotation.JsonProperty("height") private java.lang.Double height; + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("index") private java.lang.Double index; + @com.fasterxml.jackson.annotation.JsonProperty("language") private java.lang.String language; + @com.fasterxml.jackson.annotation.JsonProperty("languageCode") private java.lang.String languageCode; + @com.fasterxml.jackson.annotation.JsonProperty("languageTag") private java.lang.String languageTag; + @com.fasterxml.jackson.annotation.JsonProperty("level") private java.lang.Double level; + @com.fasterxml.jackson.annotation.JsonProperty("profile") private java.lang.String profile; + @com.fasterxml.jackson.annotation.JsonProperty("refFrames") private java.lang.Double refFrames; + @com.fasterxml.jackson.annotation.JsonProperty("streamType") private java.lang.Double streamType; + @com.fasterxml.jackson.annotation.JsonProperty("width") private java.lang.Double width; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetOnDeckResponse.MediaContainer.Metadata.Media.Part.Stream build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetOnDeckResponse.MediaContainer.Metadata.Media.Part.Stream buildWithoutValidation() { + return new GetOnDeckResponse.MediaContainer.Metadata.Media.Part.Stream(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("default_") private final java.lang.Boolean _default; + @com.fasterxml.jackson.annotation.JsonProperty("bitDepth") private final java.lang.Double bitDepth; + @com.fasterxml.jackson.annotation.JsonProperty("bitrate") private final java.lang.Double bitrate; + @com.fasterxml.jackson.annotation.JsonProperty("chromaLocation") private final java.lang.String chromaLocation; + @com.fasterxml.jackson.annotation.JsonProperty("chromaSubsampling") private final java.lang.String chromaSubsampling; + @com.fasterxml.jackson.annotation.JsonProperty("codec") private final java.lang.String codec; + @com.fasterxml.jackson.annotation.JsonProperty("codedHeight") private final java.lang.Double codedHeight; + @com.fasterxml.jackson.annotation.JsonProperty("codedWidth") private final java.lang.Double codedWidth; + @com.fasterxml.jackson.annotation.JsonProperty("colorRange") private final java.lang.String colorRange; + @com.fasterxml.jackson.annotation.JsonProperty("displayTitle") private final java.lang.String displayTitle; + @com.fasterxml.jackson.annotation.JsonProperty("extendedDisplayTitle") private final java.lang.String extendedDisplayTitle; + @com.fasterxml.jackson.annotation.JsonProperty("frameRate") private final java.lang.Double frameRate; + @com.fasterxml.jackson.annotation.JsonProperty("height") private final java.lang.Double height; + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("index") private final java.lang.Double index; + @com.fasterxml.jackson.annotation.JsonProperty("language") private final java.lang.String language; + @com.fasterxml.jackson.annotation.JsonProperty("languageCode") private final java.lang.String languageCode; + @com.fasterxml.jackson.annotation.JsonProperty("languageTag") private final java.lang.String languageTag; + @com.fasterxml.jackson.annotation.JsonProperty("level") private final java.lang.Double level; + @com.fasterxml.jackson.annotation.JsonProperty("profile") private final java.lang.String profile; + @com.fasterxml.jackson.annotation.JsonProperty("refFrames") private final java.lang.Double refFrames; + @com.fasterxml.jackson.annotation.JsonProperty("streamType") private final java.lang.Double streamType; + @com.fasterxml.jackson.annotation.JsonProperty("width") private final java.lang.Double width; + + Stream(Builder builder) { + super(builder); + + this._default = builder.get_default(); + this.bitDepth = builder.getBitDepth(); + this.bitrate = builder.getBitrate(); + this.chromaLocation = builder.getChromaLocation(); + this.chromaSubsampling = builder.getChromaSubsampling(); + this.codec = builder.getCodec(); + this.codedHeight = builder.getCodedHeight(); + this.codedWidth = builder.getCodedWidth(); + this.colorRange = builder.getColorRange(); + this.displayTitle = builder.getDisplayTitle(); + this.extendedDisplayTitle = builder.getExtendedDisplayTitle(); + this.frameRate = builder.getFrameRate(); + this.height = builder.getHeight(); + this.id = builder.getId(); + this.index = builder.getIndex(); + this.language = builder.getLanguage(); + this.languageCode = builder.getLanguageCode(); + this.languageTag = builder.getLanguageTag(); + this.level = builder.getLevel(); + this.profile = builder.getProfile(); + this.refFrames = builder.getRefFrames(); + this.streamType = builder.getStreamType(); + this.width = builder.getWidth(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("audioProfile") private java.lang.String audioProfile; + @com.fasterxml.jackson.annotation.JsonProperty("container") private java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("file") private java.lang.String file; + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("Stream") private java.util.List stream; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private java.lang.String videoProfile; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetOnDeckResponse.MediaContainer.Metadata.Media.Part build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetOnDeckResponse.MediaContainer.Metadata.Media.Part buildWithoutValidation() { + return new GetOnDeckResponse.MediaContainer.Metadata.Media.Part(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("audioProfile") private final java.lang.String audioProfile; + @com.fasterxml.jackson.annotation.JsonProperty("container") private final java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("file") private final java.lang.String file; + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("Stream") private final java.util.List stream; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private final java.lang.String videoProfile; + + Part(Builder builder) { + super(builder); + + this.audioProfile = builder.getAudioProfile(); + this.container = builder.getContainer(); + this.duration = builder.getDuration(); + this.file = builder.getFile(); + this.id = builder.getId(); + this.key = builder.getKey(); + this.size = builder.getSize(); + this.stream = builder.getStream(); + this.videoProfile = builder.getVideoProfile(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("aspectRatio") private java.lang.Double aspectRatio; + @com.fasterxml.jackson.annotation.JsonProperty("audioChannels") private java.lang.Double audioChannels; + @com.fasterxml.jackson.annotation.JsonProperty("audioCodec") private java.lang.String audioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("audioProfile") private java.lang.String audioProfile; + @com.fasterxml.jackson.annotation.JsonProperty("bitrate") private java.lang.Double bitrate; + @com.fasterxml.jackson.annotation.JsonProperty("container") private java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("height") private java.lang.Double height; + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("Part") private java.util.List part; + @com.fasterxml.jackson.annotation.JsonProperty("videoCodec") private java.lang.String videoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("videoFrameRate") private java.lang.String videoFrameRate; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private java.lang.String videoProfile; + @com.fasterxml.jackson.annotation.JsonProperty("videoResolution") private java.lang.String videoResolution; + @com.fasterxml.jackson.annotation.JsonProperty("width") private java.lang.Double width; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetOnDeckResponse.MediaContainer.Metadata.Media build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetOnDeckResponse.MediaContainer.Metadata.Media buildWithoutValidation() { + return new GetOnDeckResponse.MediaContainer.Metadata.Media(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("aspectRatio") private final java.lang.Double aspectRatio; + @com.fasterxml.jackson.annotation.JsonProperty("audioChannels") private final java.lang.Double audioChannels; + @com.fasterxml.jackson.annotation.JsonProperty("audioCodec") private final java.lang.String audioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("audioProfile") private final java.lang.String audioProfile; + @com.fasterxml.jackson.annotation.JsonProperty("bitrate") private final java.lang.Double bitrate; + @com.fasterxml.jackson.annotation.JsonProperty("container") private final java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("height") private final java.lang.Double height; + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("Part") private final java.util.List part; + @com.fasterxml.jackson.annotation.JsonProperty("videoCodec") private final java.lang.String videoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("videoFrameRate") private final java.lang.String videoFrameRate; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private final java.lang.String videoProfile; + @com.fasterxml.jackson.annotation.JsonProperty("videoResolution") private final java.lang.String videoResolution; + @com.fasterxml.jackson.annotation.JsonProperty("width") private final java.lang.Double width; + + Media(Builder builder) { + super(builder); + + this.aspectRatio = builder.getAspectRatio(); + this.audioChannels = builder.getAudioChannels(); + this.audioCodec = builder.getAudioCodec(); + this.audioProfile = builder.getAudioProfile(); + this.bitrate = builder.getBitrate(); + this.container = builder.getContainer(); + this.duration = builder.getDuration(); + this.height = builder.getHeight(); + this.id = builder.getId(); + this.part = builder.getPart(); + this.videoCodec = builder.getVideoCodec(); + this.videoFrameRate = builder.getVideoFrameRate(); + this.videoProfile = builder.getVideoProfile(); + this.videoResolution = builder.getVideoResolution(); + this.width = builder.getWidth(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("addedAt") private java.lang.Double addedAt; + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("art") private java.lang.String art; + @com.fasterxml.jackson.annotation.JsonProperty("contentRating") private java.lang.String contentRating; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentArt") private java.lang.String grandparentArt; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentGuid") private java.lang.String grandparentGuid; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentKey") private java.lang.String grandparentKey; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentRatingKey") private java.lang.Double grandparentRatingKey; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentTheme") private java.lang.String grandparentTheme; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentThumb") private java.lang.String grandparentThumb; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentTitle") private java.lang.String grandparentTitle; + @com.fasterxml.jackson.annotation.JsonProperty("Guid") private java.util.List guid; + @com.fasterxml.jackson.annotation.JsonProperty("index") private java.lang.Double index; + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("lastViewedAt") private java.lang.Double lastViewedAt; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionID") private java.lang.Double librarySectionId; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionKey") private java.lang.String librarySectionKey; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionTitle") private java.lang.String librarySectionTitle; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionUUID") private java.lang.String librarySectionUuid; + @com.fasterxml.jackson.annotation.JsonProperty("Media") private java.util.List media; + @com.fasterxml.jackson.annotation.JsonProperty("originallyAvailableAt") private java.lang.String originallyAvailableAt; + @com.fasterxml.jackson.annotation.JsonProperty("parentGuid") private java.lang.String parentGuid; + @com.fasterxml.jackson.annotation.JsonProperty("parentIndex") private java.lang.Double parentIndex; + @com.fasterxml.jackson.annotation.JsonProperty("parentKey") private java.lang.String parentKey; + @com.fasterxml.jackson.annotation.JsonProperty("parentRatingKey") private java.lang.Double parentRatingKey; + @com.fasterxml.jackson.annotation.JsonProperty("parentThumb") private java.lang.String parentThumb; + @com.fasterxml.jackson.annotation.JsonProperty("parentTitle") private java.lang.String parentTitle; + @com.fasterxml.jackson.annotation.JsonProperty("ratingKey") private java.lang.Double ratingKey; + @com.fasterxml.jackson.annotation.JsonProperty("summary") private java.lang.String summary; + @com.fasterxml.jackson.annotation.JsonProperty("thumb") private java.lang.String thumb; + @com.fasterxml.jackson.annotation.JsonProperty("title") private java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private java.lang.String type; + @com.fasterxml.jackson.annotation.JsonProperty("updatedAt") private java.lang.Double updatedAt; + @com.fasterxml.jackson.annotation.JsonProperty("year") private java.lang.Double year; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetOnDeckResponse.MediaContainer.Metadata build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetOnDeckResponse.MediaContainer.Metadata buildWithoutValidation() { + return new GetOnDeckResponse.MediaContainer.Metadata(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("addedAt") private final java.lang.Double addedAt; + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private final java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("art") private final java.lang.String art; + @com.fasterxml.jackson.annotation.JsonProperty("contentRating") private final java.lang.String contentRating; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentArt") private final java.lang.String grandparentArt; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentGuid") private final java.lang.String grandparentGuid; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentKey") private final java.lang.String grandparentKey; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentRatingKey") private final java.lang.Double grandparentRatingKey; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentTheme") private final java.lang.String grandparentTheme; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentThumb") private final java.lang.String grandparentThumb; + @com.fasterxml.jackson.annotation.JsonProperty("grandparentTitle") private final java.lang.String grandparentTitle; + @com.fasterxml.jackson.annotation.JsonProperty("Guid") private final java.util.List guid; + @com.fasterxml.jackson.annotation.JsonProperty("index") private final java.lang.Double index; + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("lastViewedAt") private final java.lang.Double lastViewedAt; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionID") private final java.lang.Double librarySectionId; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionKey") private final java.lang.String librarySectionKey; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionTitle") private final java.lang.String librarySectionTitle; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionUUID") private final java.lang.String librarySectionUuid; + @com.fasterxml.jackson.annotation.JsonProperty("Media") private final java.util.List media; + @com.fasterxml.jackson.annotation.JsonProperty("originallyAvailableAt") private final java.lang.String originallyAvailableAt; + @com.fasterxml.jackson.annotation.JsonProperty("parentGuid") private final java.lang.String parentGuid; + @com.fasterxml.jackson.annotation.JsonProperty("parentIndex") private final java.lang.Double parentIndex; + @com.fasterxml.jackson.annotation.JsonProperty("parentKey") private final java.lang.String parentKey; + @com.fasterxml.jackson.annotation.JsonProperty("parentRatingKey") private final java.lang.Double parentRatingKey; + @com.fasterxml.jackson.annotation.JsonProperty("parentThumb") private final java.lang.String parentThumb; + @com.fasterxml.jackson.annotation.JsonProperty("parentTitle") private final java.lang.String parentTitle; + @com.fasterxml.jackson.annotation.JsonProperty("ratingKey") private final java.lang.Double ratingKey; + @com.fasterxml.jackson.annotation.JsonProperty("summary") private final java.lang.String summary; + @com.fasterxml.jackson.annotation.JsonProperty("thumb") private final java.lang.String thumb; + @com.fasterxml.jackson.annotation.JsonProperty("title") private final java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private final java.lang.String type; + @com.fasterxml.jackson.annotation.JsonProperty("updatedAt") private final java.lang.Double updatedAt; + @com.fasterxml.jackson.annotation.JsonProperty("year") private final java.lang.Double year; + + Metadata(Builder builder) { + super(builder); + + this.addedAt = builder.getAddedAt(); + this.allowSync = builder.getAllowSync(); + this.art = builder.getArt(); + this.contentRating = builder.getContentRating(); + this.duration = builder.getDuration(); + this.grandparentArt = builder.getGrandparentArt(); + this.grandparentGuid = builder.getGrandparentGuid(); + this.grandparentKey = builder.getGrandparentKey(); + this.grandparentRatingKey = builder.getGrandparentRatingKey(); + this.grandparentTheme = builder.getGrandparentTheme(); + this.grandparentThumb = builder.getGrandparentThumb(); + this.grandparentTitle = builder.getGrandparentTitle(); + this.guid = builder.getGuid(); + this.index = builder.getIndex(); + this.key = builder.getKey(); + this.lastViewedAt = builder.getLastViewedAt(); + this.librarySectionId = builder.getLibrarySectionId(); + this.librarySectionKey = builder.getLibrarySectionKey(); + this.librarySectionTitle = builder.getLibrarySectionTitle(); + this.librarySectionUuid = builder.getLibrarySectionUuid(); + this.media = builder.getMedia(); + this.originallyAvailableAt = builder.getOriginallyAvailableAt(); + this.parentGuid = builder.getParentGuid(); + this.parentIndex = builder.getParentIndex(); + this.parentKey = builder.getParentKey(); + this.parentRatingKey = builder.getParentRatingKey(); + this.parentThumb = builder.getParentThumb(); + this.parentTitle = builder.getParentTitle(); + this.ratingKey = builder.getRatingKey(); + this.summary = builder.getSummary(); + this.thumb = builder.getThumb(); + this.title = builder.getTitle(); + this.type = builder.getType(); + this.updatedAt = builder.getUpdatedAt(); + this.year = builder.getYear(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("identifier") private java.lang.String identifier; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagPrefix") private java.lang.String mediaTagPrefix; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagVersion") private java.lang.Double mediaTagVersion; + @com.fasterxml.jackson.annotation.JsonProperty("Metadata") private java.util.List metadata; + @com.fasterxml.jackson.annotation.JsonProperty("mixedParents") private java.lang.Boolean mixedParents; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetOnDeckResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetOnDeckResponse.MediaContainer buildWithoutValidation() { + return new GetOnDeckResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private final java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("identifier") private final java.lang.String identifier; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagPrefix") private final java.lang.String mediaTagPrefix; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagVersion") private final java.lang.Double mediaTagVersion; + @com.fasterxml.jackson.annotation.JsonProperty("Metadata") private final java.util.List metadata; + @com.fasterxml.jackson.annotation.JsonProperty("mixedParents") private final java.lang.Boolean mixedParents; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + + MediaContainer(Builder builder) { + super(builder); + + this.allowSync = builder.getAllowSync(); + this.identifier = builder.getIdentifier(); + this.mediaTagPrefix = builder.getMediaTagPrefix(); + this.mediaTagVersion = builder.getMediaTagVersion(); + this.metadata = builder.getMetadata(); + this.mixedParents = builder.getMixedParents(); + this.size = builder.getSize(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetOnDeckResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetOnDeckResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetOnDeckResponse buildWithoutValidation() { + return new GetOnDeckResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetOnDeckResponse.MediaContainer mediaContainer; + + GetOnDeckResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/GetRecentlyAddedResponse.java b/src/main/java/47/one0/models/GetRecentlyAddedResponse.java new file mode 100644 index 00000000..f80dded3 --- /dev/null +++ b/src/main/java/47/one0/models/GetRecentlyAddedResponse.java @@ -0,0 +1,1045 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.Builder.class) +public class GetRecentlyAddedResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Metadata.Builder.class) + public static class Metadata extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Metadata.Media.Builder.class) + public static class Media extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Metadata.Media.Part.Builder.class) + public static class Part extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("container") private java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("file") private java.lang.String file; + @com.fasterxml.jackson.annotation.JsonProperty("has64bitOffsets") private java.lang.Boolean has64BitOffsets; + @com.fasterxml.jackson.annotation.JsonProperty("hasThumbnail") private java.lang.Double hasThumbnail; + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("optimizedForStreaming") private java.lang.Boolean optimizedForStreaming; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private java.lang.String videoProfile; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Media.Part build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Media.Part buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer.Metadata.Media.Part(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("container") private final java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("file") private final java.lang.String file; + @com.fasterxml.jackson.annotation.JsonProperty("has64bitOffsets") private final java.lang.Boolean has64BitOffsets; + @com.fasterxml.jackson.annotation.JsonProperty("hasThumbnail") private final java.lang.Double hasThumbnail; + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("optimizedForStreaming") private final java.lang.Boolean optimizedForStreaming; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private final java.lang.String videoProfile; + + Part(Builder builder) { + super(builder); + + this.container = builder.getContainer(); + this.duration = builder.getDuration(); + this.file = builder.getFile(); + this.has64BitOffsets = builder.getHas64BitOffsets(); + this.hasThumbnail = builder.getHasThumbnail(); + this.id = builder.getId(); + this.key = builder.getKey(); + this.optimizedForStreaming = builder.getOptimizedForStreaming(); + this.size = builder.getSize(); + this.videoProfile = builder.getVideoProfile(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("aspectRatio") private java.lang.Double aspectRatio; + @com.fasterxml.jackson.annotation.JsonProperty("audioChannels") private java.lang.Double audioChannels; + @com.fasterxml.jackson.annotation.JsonProperty("audioCodec") private java.lang.String audioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("bitrate") private java.lang.Double bitrate; + @com.fasterxml.jackson.annotation.JsonProperty("container") private java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("has64bitOffsets") private java.lang.Boolean has64BitOffsets; + @com.fasterxml.jackson.annotation.JsonProperty("height") private java.lang.Double height; + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("optimizedForStreaming") private java.lang.Double optimizedForStreaming; + @com.fasterxml.jackson.annotation.JsonProperty("Part") private java.util.List part; + @com.fasterxml.jackson.annotation.JsonProperty("videoCodec") private java.lang.String videoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("videoFrameRate") private java.lang.String videoFrameRate; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private java.lang.String videoProfile; + @com.fasterxml.jackson.annotation.JsonProperty("videoResolution") private java.lang.Double videoResolution; + @com.fasterxml.jackson.annotation.JsonProperty("width") private java.lang.Double width; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Media build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Media buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer.Metadata.Media(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("aspectRatio") private final java.lang.Double aspectRatio; + @com.fasterxml.jackson.annotation.JsonProperty("audioChannels") private final java.lang.Double audioChannels; + @com.fasterxml.jackson.annotation.JsonProperty("audioCodec") private final java.lang.String audioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("bitrate") private final java.lang.Double bitrate; + @com.fasterxml.jackson.annotation.JsonProperty("container") private final java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("has64bitOffsets") private final java.lang.Boolean has64BitOffsets; + @com.fasterxml.jackson.annotation.JsonProperty("height") private final java.lang.Double height; + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("optimizedForStreaming") private final java.lang.Double optimizedForStreaming; + @com.fasterxml.jackson.annotation.JsonProperty("Part") private final java.util.List part; + @com.fasterxml.jackson.annotation.JsonProperty("videoCodec") private final java.lang.String videoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("videoFrameRate") private final java.lang.String videoFrameRate; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private final java.lang.String videoProfile; + @com.fasterxml.jackson.annotation.JsonProperty("videoResolution") private final java.lang.Double videoResolution; + @com.fasterxml.jackson.annotation.JsonProperty("width") private final java.lang.Double width; + + Media(Builder builder) { + super(builder); + + this.aspectRatio = builder.getAspectRatio(); + this.audioChannels = builder.getAudioChannels(); + this.audioCodec = builder.getAudioCodec(); + this.bitrate = builder.getBitrate(); + this.container = builder.getContainer(); + this.duration = builder.getDuration(); + this.has64BitOffsets = builder.getHas64BitOffsets(); + this.height = builder.getHeight(); + this.id = builder.getId(); + this.optimizedForStreaming = builder.getOptimizedForStreaming(); + this.part = builder.getPart(); + this.videoCodec = builder.getVideoCodec(); + this.videoFrameRate = builder.getVideoFrameRate(); + this.videoProfile = builder.getVideoProfile(); + this.videoResolution = builder.getVideoResolution(); + this.width = builder.getWidth(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Metadata.Genre.Builder.class) + public static class Genre extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Genre build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Genre buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer.Metadata.Genre(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Genre(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Metadata.Director.Builder.class) + public static class Director extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Director build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Director buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer.Metadata.Director(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Director(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Metadata.Writer.Builder.class) + public static class Writer extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Writer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Writer buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer.Metadata.Writer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Writer(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Metadata.Country.Builder.class) + public static class Country extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Country build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Country buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer.Metadata.Country(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Country(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetRecentlyAddedResponse.MediaContainer.Metadata.Role.Builder.class) + public static class Role extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Role build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata.Role buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer.Metadata.Role(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Role(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("addedAt") private java.lang.Double addedAt; + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("art") private java.lang.String art; + @com.fasterxml.jackson.annotation.JsonProperty("audienceRating") private java.lang.Double audienceRating; + @com.fasterxml.jackson.annotation.JsonProperty("audienceRatingImage") private java.lang.String audienceRatingImage; + @com.fasterxml.jackson.annotation.JsonProperty("chapterSource") private java.lang.String chapterSource; + @com.fasterxml.jackson.annotation.JsonProperty("contentRating") private java.lang.String contentRating; + @com.fasterxml.jackson.annotation.JsonProperty("Country") private java.util.List country; + @com.fasterxml.jackson.annotation.JsonProperty("Director") private java.util.List director; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("Genre") private java.util.List genre; + @com.fasterxml.jackson.annotation.JsonProperty("guid") private java.lang.String guid; + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionID") private java.lang.Double librarySectionId; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionTitle") private java.lang.String librarySectionTitle; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionUUID") private java.lang.String librarySectionUuid; + @com.fasterxml.jackson.annotation.JsonProperty("Media") private java.util.List media; + @com.fasterxml.jackson.annotation.JsonProperty("originallyAvailableAt") private java.lang.String originallyAvailableAt; + @com.fasterxml.jackson.annotation.JsonProperty("primaryExtraKey") private java.lang.String primaryExtraKey; + @com.fasterxml.jackson.annotation.JsonProperty("rating") private java.lang.Double rating; + @com.fasterxml.jackson.annotation.JsonProperty("ratingImage") private java.lang.String ratingImage; + @com.fasterxml.jackson.annotation.JsonProperty("ratingKey") private java.lang.Double ratingKey; + @com.fasterxml.jackson.annotation.JsonProperty("Role") private java.util.List role; + @com.fasterxml.jackson.annotation.JsonProperty("studio") private java.lang.String studio; + @com.fasterxml.jackson.annotation.JsonProperty("summary") private java.lang.String summary; + @com.fasterxml.jackson.annotation.JsonProperty("tagline") private java.lang.String tagline; + @com.fasterxml.jackson.annotation.JsonProperty("thumb") private java.lang.String thumb; + @com.fasterxml.jackson.annotation.JsonProperty("title") private java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private java.lang.String type; + @com.fasterxml.jackson.annotation.JsonProperty("updatedAt") private java.lang.Double updatedAt; + @com.fasterxml.jackson.annotation.JsonProperty("Writer") private java.util.List writer; + @com.fasterxml.jackson.annotation.JsonProperty("year") private java.lang.Double year; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer.Metadata buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer.Metadata(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("addedAt") private final java.lang.Double addedAt; + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private final java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("art") private final java.lang.String art; + @com.fasterxml.jackson.annotation.JsonProperty("audienceRating") private final java.lang.Double audienceRating; + @com.fasterxml.jackson.annotation.JsonProperty("audienceRatingImage") private final java.lang.String audienceRatingImage; + @com.fasterxml.jackson.annotation.JsonProperty("chapterSource") private final java.lang.String chapterSource; + @com.fasterxml.jackson.annotation.JsonProperty("contentRating") private final java.lang.String contentRating; + @com.fasterxml.jackson.annotation.JsonProperty("Country") private final java.util.List country; + @com.fasterxml.jackson.annotation.JsonProperty("Director") private final java.util.List director; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("Genre") private final java.util.List genre; + @com.fasterxml.jackson.annotation.JsonProperty("guid") private final java.lang.String guid; + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionID") private final java.lang.Double librarySectionId; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionTitle") private final java.lang.String librarySectionTitle; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionUUID") private final java.lang.String librarySectionUuid; + @com.fasterxml.jackson.annotation.JsonProperty("Media") private final java.util.List media; + @com.fasterxml.jackson.annotation.JsonProperty("originallyAvailableAt") private final java.lang.String originallyAvailableAt; + @com.fasterxml.jackson.annotation.JsonProperty("primaryExtraKey") private final java.lang.String primaryExtraKey; + @com.fasterxml.jackson.annotation.JsonProperty("rating") private final java.lang.Double rating; + @com.fasterxml.jackson.annotation.JsonProperty("ratingImage") private final java.lang.String ratingImage; + @com.fasterxml.jackson.annotation.JsonProperty("ratingKey") private final java.lang.Double ratingKey; + @com.fasterxml.jackson.annotation.JsonProperty("Role") private final java.util.List role; + @com.fasterxml.jackson.annotation.JsonProperty("studio") private final java.lang.String studio; + @com.fasterxml.jackson.annotation.JsonProperty("summary") private final java.lang.String summary; + @com.fasterxml.jackson.annotation.JsonProperty("tagline") private final java.lang.String tagline; + @com.fasterxml.jackson.annotation.JsonProperty("thumb") private final java.lang.String thumb; + @com.fasterxml.jackson.annotation.JsonProperty("title") private final java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private final java.lang.String type; + @com.fasterxml.jackson.annotation.JsonProperty("updatedAt") private final java.lang.Double updatedAt; + @com.fasterxml.jackson.annotation.JsonProperty("Writer") private final java.util.List writer; + @com.fasterxml.jackson.annotation.JsonProperty("year") private final java.lang.Double year; + + Metadata(Builder builder) { + super(builder); + + this.addedAt = builder.getAddedAt(); + this.allowSync = builder.getAllowSync(); + this.art = builder.getArt(); + this.audienceRating = builder.getAudienceRating(); + this.audienceRatingImage = builder.getAudienceRatingImage(); + this.chapterSource = builder.getChapterSource(); + this.contentRating = builder.getContentRating(); + this.country = builder.getCountry(); + this.director = builder.getDirector(); + this.duration = builder.getDuration(); + this.genre = builder.getGenre(); + this.guid = builder.getGuid(); + this.key = builder.getKey(); + this.librarySectionId = builder.getLibrarySectionId(); + this.librarySectionTitle = builder.getLibrarySectionTitle(); + this.librarySectionUuid = builder.getLibrarySectionUuid(); + this.media = builder.getMedia(); + this.originallyAvailableAt = builder.getOriginallyAvailableAt(); + this.primaryExtraKey = builder.getPrimaryExtraKey(); + this.rating = builder.getRating(); + this.ratingImage = builder.getRatingImage(); + this.ratingKey = builder.getRatingKey(); + this.role = builder.getRole(); + this.studio = builder.getStudio(); + this.summary = builder.getSummary(); + this.tagline = builder.getTagline(); + this.thumb = builder.getThumb(); + this.title = builder.getTitle(); + this.type = builder.getType(); + this.updatedAt = builder.getUpdatedAt(); + this.writer = builder.getWriter(); + this.year = builder.getYear(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("identifier") private java.lang.String identifier; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagPrefix") private java.lang.String mediaTagPrefix; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagVersion") private java.lang.Double mediaTagVersion; + @com.fasterxml.jackson.annotation.JsonProperty("Metadata") private java.util.List metadata; + @com.fasterxml.jackson.annotation.JsonProperty("mixedParents") private java.lang.Boolean mixedParents; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse.MediaContainer buildWithoutValidation() { + return new GetRecentlyAddedResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private final java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("identifier") private final java.lang.String identifier; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagPrefix") private final java.lang.String mediaTagPrefix; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagVersion") private final java.lang.Double mediaTagVersion; + @com.fasterxml.jackson.annotation.JsonProperty("Metadata") private final java.util.List metadata; + @com.fasterxml.jackson.annotation.JsonProperty("mixedParents") private final java.lang.Boolean mixedParents; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + + MediaContainer(Builder builder) { + super(builder); + + this.allowSync = builder.getAllowSync(); + this.identifier = builder.getIdentifier(); + this.mediaTagPrefix = builder.getMediaTagPrefix(); + this.mediaTagVersion = builder.getMediaTagVersion(); + this.metadata = builder.getMetadata(); + this.mixedParents = builder.getMixedParents(); + this.size = builder.getSize(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetRecentlyAddedResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetRecentlyAddedResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetRecentlyAddedResponse buildWithoutValidation() { + return new GetRecentlyAddedResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetRecentlyAddedResponse.MediaContainer mediaContainer; + + GetRecentlyAddedResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/GetSearchResultsResponse.java b/src/main/java/47/one0/models/GetSearchResultsResponse.java new file mode 100644 index 00000000..8e2aa4a8 --- /dev/null +++ b/src/main/java/47/one0/models/GetSearchResultsResponse.java @@ -0,0 +1,1132 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.Builder.class) +public class GetSearchResultsResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Metadata.Builder.class) + public static class Metadata extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Metadata.Media.Builder.class) + public static class Media extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Metadata.Media.Part.Builder.class) + public static class Part extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("audioProfile") private java.lang.String audioProfile; + @com.fasterxml.jackson.annotation.JsonProperty("container") private java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("file") private java.lang.String file; + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private java.lang.String videoProfile; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Media.Part build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Media.Part buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Metadata.Media.Part(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("audioProfile") private final java.lang.String audioProfile; + @com.fasterxml.jackson.annotation.JsonProperty("container") private final java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("file") private final java.lang.String file; + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private final java.lang.String videoProfile; + + Part(Builder builder) { + super(builder); + + this.audioProfile = builder.getAudioProfile(); + this.container = builder.getContainer(); + this.duration = builder.getDuration(); + this.file = builder.getFile(); + this.id = builder.getId(); + this.key = builder.getKey(); + this.size = builder.getSize(); + this.videoProfile = builder.getVideoProfile(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("aspectRatio") private java.lang.Double aspectRatio; + @com.fasterxml.jackson.annotation.JsonProperty("audioChannels") private java.lang.Double audioChannels; + @com.fasterxml.jackson.annotation.JsonProperty("audioCodec") private java.lang.String audioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("audioProfile") private java.lang.String audioProfile; + @com.fasterxml.jackson.annotation.JsonProperty("bitrate") private java.lang.Double bitrate; + @com.fasterxml.jackson.annotation.JsonProperty("container") private java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("height") private java.lang.Double height; + @com.fasterxml.jackson.annotation.JsonProperty("id") private java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("Part") private java.util.List part; + @com.fasterxml.jackson.annotation.JsonProperty("videoCodec") private java.lang.String videoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("videoFrameRate") private java.lang.String videoFrameRate; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private java.lang.String videoProfile; + @com.fasterxml.jackson.annotation.JsonProperty("videoResolution") private java.lang.Double videoResolution; + @com.fasterxml.jackson.annotation.JsonProperty("width") private java.lang.Double width; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Media build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Media buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Metadata.Media(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("aspectRatio") private final java.lang.Double aspectRatio; + @com.fasterxml.jackson.annotation.JsonProperty("audioChannels") private final java.lang.Double audioChannels; + @com.fasterxml.jackson.annotation.JsonProperty("audioCodec") private final java.lang.String audioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("audioProfile") private final java.lang.String audioProfile; + @com.fasterxml.jackson.annotation.JsonProperty("bitrate") private final java.lang.Double bitrate; + @com.fasterxml.jackson.annotation.JsonProperty("container") private final java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("height") private final java.lang.Double height; + @com.fasterxml.jackson.annotation.JsonProperty("id") private final java.lang.Double id; + @com.fasterxml.jackson.annotation.JsonProperty("Part") private final java.util.List part; + @com.fasterxml.jackson.annotation.JsonProperty("videoCodec") private final java.lang.String videoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("videoFrameRate") private final java.lang.String videoFrameRate; + @com.fasterxml.jackson.annotation.JsonProperty("videoProfile") private final java.lang.String videoProfile; + @com.fasterxml.jackson.annotation.JsonProperty("videoResolution") private final java.lang.Double videoResolution; + @com.fasterxml.jackson.annotation.JsonProperty("width") private final java.lang.Double width; + + Media(Builder builder) { + super(builder); + + this.aspectRatio = builder.getAspectRatio(); + this.audioChannels = builder.getAudioChannels(); + this.audioCodec = builder.getAudioCodec(); + this.audioProfile = builder.getAudioProfile(); + this.bitrate = builder.getBitrate(); + this.container = builder.getContainer(); + this.duration = builder.getDuration(); + this.height = builder.getHeight(); + this.id = builder.getId(); + this.part = builder.getPart(); + this.videoCodec = builder.getVideoCodec(); + this.videoFrameRate = builder.getVideoFrameRate(); + this.videoProfile = builder.getVideoProfile(); + this.videoResolution = builder.getVideoResolution(); + this.width = builder.getWidth(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Metadata.Genre.Builder.class) + public static class Genre extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Genre build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Genre buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Metadata.Genre(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Genre(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Metadata.Director.Builder.class) + public static class Director extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Director build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Director buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Metadata.Director(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Director(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Metadata.Writer.Builder.class) + public static class Writer extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Writer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Writer buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Metadata.Writer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Writer(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Metadata.Country.Builder.class) + public static class Country extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Country build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Country buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Metadata.Country(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Country(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Metadata.Role.Builder.class) + public static class Role extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private java.lang.String tag; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Role build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Metadata.Role buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Metadata.Role(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("tag") private final java.lang.String tag; + + Role(Builder builder) { + super(builder); + + this.tag = builder.getTag(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("addedAt") private java.lang.Double addedAt; + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("art") private java.lang.String art; + @com.fasterxml.jackson.annotation.JsonProperty("audienceRating") private java.lang.Double audienceRating; + @com.fasterxml.jackson.annotation.JsonProperty("audienceRatingImage") private java.lang.String audienceRatingImage; + @com.fasterxml.jackson.annotation.JsonProperty("chapterSource") private java.lang.String chapterSource; + @com.fasterxml.jackson.annotation.JsonProperty("contentRating") private java.lang.String contentRating; + @com.fasterxml.jackson.annotation.JsonProperty("Country") private java.util.List country; + @com.fasterxml.jackson.annotation.JsonProperty("Director") private java.util.List director; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("Genre") private java.util.List genre; + @com.fasterxml.jackson.annotation.JsonProperty("guid") private java.lang.String guid; + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionID") private java.lang.Double librarySectionId; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionTitle") private java.lang.String librarySectionTitle; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionUUID") private java.lang.String librarySectionUuid; + @com.fasterxml.jackson.annotation.JsonProperty("Media") private java.util.List media; + @com.fasterxml.jackson.annotation.JsonProperty("originallyAvailableAt") private java.lang.String originallyAvailableAt; + @com.fasterxml.jackson.annotation.JsonProperty("personal") private java.lang.Boolean personal; + @com.fasterxml.jackson.annotation.JsonProperty("primaryExtraKey") private java.lang.String primaryExtraKey; + @com.fasterxml.jackson.annotation.JsonProperty("rating") private java.lang.Double rating; + @com.fasterxml.jackson.annotation.JsonProperty("ratingImage") private java.lang.String ratingImage; + @com.fasterxml.jackson.annotation.JsonProperty("ratingKey") private java.lang.Double ratingKey; + @com.fasterxml.jackson.annotation.JsonProperty("Role") private java.util.List role; + @com.fasterxml.jackson.annotation.JsonProperty("sourceTitle") private java.lang.String sourceTitle; + @com.fasterxml.jackson.annotation.JsonProperty("studio") private java.lang.String studio; + @com.fasterxml.jackson.annotation.JsonProperty("summary") private java.lang.String summary; + @com.fasterxml.jackson.annotation.JsonProperty("tagline") private java.lang.String tagline; + @com.fasterxml.jackson.annotation.JsonProperty("thumb") private java.lang.String thumb; + @com.fasterxml.jackson.annotation.JsonProperty("title") private java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private java.lang.String type; + @com.fasterxml.jackson.annotation.JsonProperty("updatedAt") private java.lang.Double updatedAt; + @com.fasterxml.jackson.annotation.JsonProperty("Writer") private java.util.List writer; + @com.fasterxml.jackson.annotation.JsonProperty("year") private java.lang.Double year; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Metadata build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Metadata buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Metadata(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("addedAt") private final java.lang.Double addedAt; + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private final java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("art") private final java.lang.String art; + @com.fasterxml.jackson.annotation.JsonProperty("audienceRating") private final java.lang.Double audienceRating; + @com.fasterxml.jackson.annotation.JsonProperty("audienceRatingImage") private final java.lang.String audienceRatingImage; + @com.fasterxml.jackson.annotation.JsonProperty("chapterSource") private final java.lang.String chapterSource; + @com.fasterxml.jackson.annotation.JsonProperty("contentRating") private final java.lang.String contentRating; + @com.fasterxml.jackson.annotation.JsonProperty("Country") private final java.util.List country; + @com.fasterxml.jackson.annotation.JsonProperty("Director") private final java.util.List director; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("Genre") private final java.util.List genre; + @com.fasterxml.jackson.annotation.JsonProperty("guid") private final java.lang.String guid; + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionID") private final java.lang.Double librarySectionId; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionTitle") private final java.lang.String librarySectionTitle; + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionUUID") private final java.lang.String librarySectionUuid; + @com.fasterxml.jackson.annotation.JsonProperty("Media") private final java.util.List media; + @com.fasterxml.jackson.annotation.JsonProperty("originallyAvailableAt") private final java.lang.String originallyAvailableAt; + @com.fasterxml.jackson.annotation.JsonProperty("personal") private final java.lang.Boolean personal; + @com.fasterxml.jackson.annotation.JsonProperty("primaryExtraKey") private final java.lang.String primaryExtraKey; + @com.fasterxml.jackson.annotation.JsonProperty("rating") private final java.lang.Double rating; + @com.fasterxml.jackson.annotation.JsonProperty("ratingImage") private final java.lang.String ratingImage; + @com.fasterxml.jackson.annotation.JsonProperty("ratingKey") private final java.lang.Double ratingKey; + @com.fasterxml.jackson.annotation.JsonProperty("Role") private final java.util.List role; + @com.fasterxml.jackson.annotation.JsonProperty("sourceTitle") private final java.lang.String sourceTitle; + @com.fasterxml.jackson.annotation.JsonProperty("studio") private final java.lang.String studio; + @com.fasterxml.jackson.annotation.JsonProperty("summary") private final java.lang.String summary; + @com.fasterxml.jackson.annotation.JsonProperty("tagline") private final java.lang.String tagline; + @com.fasterxml.jackson.annotation.JsonProperty("thumb") private final java.lang.String thumb; + @com.fasterxml.jackson.annotation.JsonProperty("title") private final java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private final java.lang.String type; + @com.fasterxml.jackson.annotation.JsonProperty("updatedAt") private final java.lang.Double updatedAt; + @com.fasterxml.jackson.annotation.JsonProperty("Writer") private final java.util.List writer; + @com.fasterxml.jackson.annotation.JsonProperty("year") private final java.lang.Double year; + + Metadata(Builder builder) { + super(builder); + + this.addedAt = builder.getAddedAt(); + this.allowSync = builder.getAllowSync(); + this.art = builder.getArt(); + this.audienceRating = builder.getAudienceRating(); + this.audienceRatingImage = builder.getAudienceRatingImage(); + this.chapterSource = builder.getChapterSource(); + this.contentRating = builder.getContentRating(); + this.country = builder.getCountry(); + this.director = builder.getDirector(); + this.duration = builder.getDuration(); + this.genre = builder.getGenre(); + this.guid = builder.getGuid(); + this.key = builder.getKey(); + this.librarySectionId = builder.getLibrarySectionId(); + this.librarySectionTitle = builder.getLibrarySectionTitle(); + this.librarySectionUuid = builder.getLibrarySectionUuid(); + this.media = builder.getMedia(); + this.originallyAvailableAt = builder.getOriginallyAvailableAt(); + this.personal = builder.getPersonal(); + this.primaryExtraKey = builder.getPrimaryExtraKey(); + this.rating = builder.getRating(); + this.ratingImage = builder.getRatingImage(); + this.ratingKey = builder.getRatingKey(); + this.role = builder.getRole(); + this.sourceTitle = builder.getSourceTitle(); + this.studio = builder.getStudio(); + this.summary = builder.getSummary(); + this.tagline = builder.getTagline(); + this.thumb = builder.getThumb(); + this.title = builder.getTitle(); + this.type = builder.getType(); + this.updatedAt = builder.getUpdatedAt(); + this.writer = builder.getWriter(); + this.year = builder.getYear(); + } + } + + + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetSearchResultsResponse.MediaContainer.Provider.Builder.class) + public static class Provider extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("title") private java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private java.lang.String type; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer.Provider build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer.Provider buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer.Provider(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("title") private final java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private final java.lang.String type; + + Provider(Builder builder) { + super(builder); + + this.key = builder.getKey(); + this.title = builder.getTitle(); + this.type = builder.getType(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("identifier") private java.lang.String identifier; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagPrefix") private java.lang.String mediaTagPrefix; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagVersion") private java.lang.Double mediaTagVersion; + @com.fasterxml.jackson.annotation.JsonProperty("Metadata") private java.util.List metadata; + @com.fasterxml.jackson.annotation.JsonProperty("Provider") private java.util.List provider; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse.MediaContainer buildWithoutValidation() { + return new GetSearchResultsResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("identifier") private final java.lang.String identifier; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagPrefix") private final java.lang.String mediaTagPrefix; + @com.fasterxml.jackson.annotation.JsonProperty("mediaTagVersion") private final java.lang.Double mediaTagVersion; + @com.fasterxml.jackson.annotation.JsonProperty("Metadata") private final java.util.List metadata; + @com.fasterxml.jackson.annotation.JsonProperty("Provider") private final java.util.List provider; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + + MediaContainer(Builder builder) { + super(builder); + + this.identifier = builder.getIdentifier(); + this.mediaTagPrefix = builder.getMediaTagPrefix(); + this.mediaTagVersion = builder.getMediaTagVersion(); + this.metadata = builder.getMetadata(); + this.provider = builder.getProvider(); + this.size = builder.getSize(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetSearchResultsResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetSearchResultsResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetSearchResultsResponse buildWithoutValidation() { + return new GetSearchResultsResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetSearchResultsResponse.MediaContainer mediaContainer; + + GetSearchResultsResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/GetServerActivitiesResponse.java b/src/main/java/47/one0/models/GetServerActivitiesResponse.java new file mode 100644 index 00000000..b9152654 --- /dev/null +++ b/src/main/java/47/one0/models/GetServerActivitiesResponse.java @@ -0,0 +1,366 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerActivitiesResponse.Builder.class) +public class GetServerActivitiesResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerActivitiesResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerActivitiesResponse.MediaContainer.Activity.Builder.class) + public static class Activity extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerActivitiesResponse.MediaContainer.Activity.Context.Builder.class) + public static class Context extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionID") private java.lang.String librarySectionId; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerActivitiesResponse.MediaContainer.Activity.Context build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerActivitiesResponse.MediaContainer.Activity.Context buildWithoutValidation() { + return new GetServerActivitiesResponse.MediaContainer.Activity.Context(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("librarySectionID") private final java.lang.String librarySectionId; + + Context(Builder builder) { + super(builder); + + this.librarySectionId = builder.getLibrarySectionId(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("cancellable") private java.lang.Boolean cancellable; + @com.fasterxml.jackson.annotation.JsonProperty("Context") private GetServerActivitiesResponse.MediaContainer.Activity.Context context; + @com.fasterxml.jackson.annotation.JsonProperty("progress") private java.lang.Double progress; + @com.fasterxml.jackson.annotation.JsonProperty("subtitle") private java.lang.String subtitle; + @com.fasterxml.jackson.annotation.JsonProperty("title") private java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private java.lang.String type; + @com.fasterxml.jackson.annotation.JsonProperty("userID") private java.lang.Double userId; + @com.fasterxml.jackson.annotation.JsonProperty("uuid") private java.lang.String uuid; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerActivitiesResponse.MediaContainer.Activity build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerActivitiesResponse.MediaContainer.Activity buildWithoutValidation() { + return new GetServerActivitiesResponse.MediaContainer.Activity(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("cancellable") private final java.lang.Boolean cancellable; + @com.fasterxml.jackson.annotation.JsonProperty("Context") private final GetServerActivitiesResponse.MediaContainer.Activity.Context context; + @com.fasterxml.jackson.annotation.JsonProperty("progress") private final java.lang.Double progress; + @com.fasterxml.jackson.annotation.JsonProperty("subtitle") private final java.lang.String subtitle; + @com.fasterxml.jackson.annotation.JsonProperty("title") private final java.lang.String title; + @com.fasterxml.jackson.annotation.JsonProperty("type") private final java.lang.String type; + @com.fasterxml.jackson.annotation.JsonProperty("userID") private final java.lang.Double userId; + @com.fasterxml.jackson.annotation.JsonProperty("uuid") private final java.lang.String uuid; + + Activity(Builder builder) { + super(builder); + + this.cancellable = builder.getCancellable(); + this.context = builder.getContext(); + this.progress = builder.getProgress(); + this.subtitle = builder.getSubtitle(); + this.title = builder.getTitle(); + this.type = builder.getType(); + this.userId = builder.getUserId(); + this.uuid = builder.getUuid(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("Activity") private java.util.List activity; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerActivitiesResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerActivitiesResponse.MediaContainer buildWithoutValidation() { + return new GetServerActivitiesResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("Activity") private final java.util.List activity; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + + MediaContainer(Builder builder) { + super(builder); + + this.activity = builder.getActivity(); + this.size = builder.getSize(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetServerActivitiesResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerActivitiesResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerActivitiesResponse buildWithoutValidation() { + return new GetServerActivitiesResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetServerActivitiesResponse.MediaContainer mediaContainer; + + GetServerActivitiesResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/GetServerCapabilitiesResponse.java b/src/main/java/47/one0/models/GetServerCapabilitiesResponse.java new file mode 100644 index 00000000..0ec01719 --- /dev/null +++ b/src/main/java/47/one0/models/GetServerCapabilitiesResponse.java @@ -0,0 +1,413 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerCapabilitiesResponse.Builder.class) +public class GetServerCapabilitiesResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerCapabilitiesResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerCapabilitiesResponse.MediaContainer.Directory.Builder.class) + public static class Directory extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("count") private java.lang.Double count; + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("title") private java.lang.String title; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerCapabilitiesResponse.MediaContainer.Directory build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerCapabilitiesResponse.MediaContainer.Directory buildWithoutValidation() { + return new GetServerCapabilitiesResponse.MediaContainer.Directory(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("count") private final java.lang.Double count; + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("title") private final java.lang.String title; + + Directory(Builder builder) { + super(builder); + + this.count = builder.getCount(); + this.key = builder.getKey(); + this.title = builder.getTitle(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("allowCameraUpload") private java.lang.Boolean allowCameraUpload; + @com.fasterxml.jackson.annotation.JsonProperty("allowChannelAccess") private java.lang.Boolean allowChannelAccess; + @com.fasterxml.jackson.annotation.JsonProperty("allowMediaDeletion") private java.lang.Boolean allowMediaDeletion; + @com.fasterxml.jackson.annotation.JsonProperty("allowSharing") private java.lang.Boolean allowSharing; + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("allowTuners") private java.lang.Boolean allowTuners; + @com.fasterxml.jackson.annotation.JsonProperty("backgroundProcessing") private java.lang.Boolean backgroundProcessing; + @com.fasterxml.jackson.annotation.JsonProperty("certificate") private java.lang.Boolean certificate; + @com.fasterxml.jackson.annotation.JsonProperty("companionProxy") private java.lang.Boolean companionProxy; + @com.fasterxml.jackson.annotation.JsonProperty("countryCode") private java.lang.String countryCode; + @com.fasterxml.jackson.annotation.JsonProperty("diagnostics") private java.lang.String diagnostics; + @com.fasterxml.jackson.annotation.JsonProperty("Directory") private java.util.List directory; + @com.fasterxml.jackson.annotation.JsonProperty("eventStream") private java.lang.Boolean eventStream; + @com.fasterxml.jackson.annotation.JsonProperty("friendlyName") private java.lang.String friendlyName; + @com.fasterxml.jackson.annotation.JsonProperty("hubSearch") private java.lang.Boolean hubSearch; + @com.fasterxml.jackson.annotation.JsonProperty("itemClusters") private java.lang.Boolean itemClusters; + @com.fasterxml.jackson.annotation.JsonProperty("livetv") private java.lang.Double livetv; + @com.fasterxml.jackson.annotation.JsonProperty("machineIdentifier") private java.lang.String machineIdentifier; + @com.fasterxml.jackson.annotation.JsonProperty("mediaProviders") private java.lang.Boolean mediaProviders; + @com.fasterxml.jackson.annotation.JsonProperty("multiuser") private java.lang.Boolean multiuser; + @com.fasterxml.jackson.annotation.JsonProperty("musicAnalysis") private java.lang.Double musicAnalysis; + @com.fasterxml.jackson.annotation.JsonProperty("myPlex") private java.lang.Boolean myPlex; + @com.fasterxml.jackson.annotation.JsonProperty("myPlexMappingState") private java.lang.String myPlexMappingState; + @com.fasterxml.jackson.annotation.JsonProperty("myPlexSigninState") private java.lang.String myPlexSigninState; + @com.fasterxml.jackson.annotation.JsonProperty("myPlexSubscription") private java.lang.Boolean myPlexSubscription; + @com.fasterxml.jackson.annotation.JsonProperty("myPlexUsername") private java.lang.String myPlexUsername; + @com.fasterxml.jackson.annotation.JsonProperty("offlineTranscode") private java.lang.Double offlineTranscode; + @com.fasterxml.jackson.annotation.JsonProperty("ownerFeatures") private java.lang.String ownerFeatures; + @com.fasterxml.jackson.annotation.JsonProperty("photoAutoTag") private java.lang.Boolean photoAutoTag; + @com.fasterxml.jackson.annotation.JsonProperty("platform") private java.lang.String platform; + @com.fasterxml.jackson.annotation.JsonProperty("platformVersion") private java.lang.String platformVersion; + @com.fasterxml.jackson.annotation.JsonProperty("pluginHost") private java.lang.Boolean pluginHost; + @com.fasterxml.jackson.annotation.JsonProperty("pushNotifications") private java.lang.Boolean pushNotifications; + @com.fasterxml.jackson.annotation.JsonProperty("readOnlyLibraries") private java.lang.Boolean readOnlyLibraries; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("streamingBrainABRVersion") private java.lang.Double streamingBrainAbrversion; + @com.fasterxml.jackson.annotation.JsonProperty("streamingBrainVersion") private java.lang.Double streamingBrainVersion; + @com.fasterxml.jackson.annotation.JsonProperty("sync") private java.lang.Boolean sync; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderActiveVideoSessions") private java.lang.Double transcoderActiveVideoSessions; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderAudio") private java.lang.Boolean transcoderAudio; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderLyrics") private java.lang.Boolean transcoderLyrics; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderPhoto") private java.lang.Boolean transcoderPhoto; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderSubtitles") private java.lang.Boolean transcoderSubtitles; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderVideo") private java.lang.Boolean transcoderVideo; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderVideoBitrates") private java.lang.String transcoderVideoBitrates; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderVideoQualities") private java.lang.String transcoderVideoQualities; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderVideoResolutions") private java.lang.String transcoderVideoResolutions; + @com.fasterxml.jackson.annotation.JsonProperty("updatedAt") private java.lang.Double updatedAt; + @com.fasterxml.jackson.annotation.JsonProperty("updater") private java.lang.Boolean updater; + @com.fasterxml.jackson.annotation.JsonProperty("version") private java.lang.String version; + @com.fasterxml.jackson.annotation.JsonProperty("voiceSearch") private java.lang.Boolean voiceSearch; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerCapabilitiesResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerCapabilitiesResponse.MediaContainer buildWithoutValidation() { + return new GetServerCapabilitiesResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("allowCameraUpload") private final java.lang.Boolean allowCameraUpload; + @com.fasterxml.jackson.annotation.JsonProperty("allowChannelAccess") private final java.lang.Boolean allowChannelAccess; + @com.fasterxml.jackson.annotation.JsonProperty("allowMediaDeletion") private final java.lang.Boolean allowMediaDeletion; + @com.fasterxml.jackson.annotation.JsonProperty("allowSharing") private final java.lang.Boolean allowSharing; + @com.fasterxml.jackson.annotation.JsonProperty("allowSync") private final java.lang.Boolean allowSync; + @com.fasterxml.jackson.annotation.JsonProperty("allowTuners") private final java.lang.Boolean allowTuners; + @com.fasterxml.jackson.annotation.JsonProperty("backgroundProcessing") private final java.lang.Boolean backgroundProcessing; + @com.fasterxml.jackson.annotation.JsonProperty("certificate") private final java.lang.Boolean certificate; + @com.fasterxml.jackson.annotation.JsonProperty("companionProxy") private final java.lang.Boolean companionProxy; + @com.fasterxml.jackson.annotation.JsonProperty("countryCode") private final java.lang.String countryCode; + @com.fasterxml.jackson.annotation.JsonProperty("diagnostics") private final java.lang.String diagnostics; + @com.fasterxml.jackson.annotation.JsonProperty("Directory") private final java.util.List directory; + @com.fasterxml.jackson.annotation.JsonProperty("eventStream") private final java.lang.Boolean eventStream; + @com.fasterxml.jackson.annotation.JsonProperty("friendlyName") private final java.lang.String friendlyName; + @com.fasterxml.jackson.annotation.JsonProperty("hubSearch") private final java.lang.Boolean hubSearch; + @com.fasterxml.jackson.annotation.JsonProperty("itemClusters") private final java.lang.Boolean itemClusters; + @com.fasterxml.jackson.annotation.JsonProperty("livetv") private final java.lang.Double livetv; + @com.fasterxml.jackson.annotation.JsonProperty("machineIdentifier") private final java.lang.String machineIdentifier; + @com.fasterxml.jackson.annotation.JsonProperty("mediaProviders") private final java.lang.Boolean mediaProviders; + @com.fasterxml.jackson.annotation.JsonProperty("multiuser") private final java.lang.Boolean multiuser; + @com.fasterxml.jackson.annotation.JsonProperty("musicAnalysis") private final java.lang.Double musicAnalysis; + @com.fasterxml.jackson.annotation.JsonProperty("myPlex") private final java.lang.Boolean myPlex; + @com.fasterxml.jackson.annotation.JsonProperty("myPlexMappingState") private final java.lang.String myPlexMappingState; + @com.fasterxml.jackson.annotation.JsonProperty("myPlexSigninState") private final java.lang.String myPlexSigninState; + @com.fasterxml.jackson.annotation.JsonProperty("myPlexSubscription") private final java.lang.Boolean myPlexSubscription; + @com.fasterxml.jackson.annotation.JsonProperty("myPlexUsername") private final java.lang.String myPlexUsername; + @com.fasterxml.jackson.annotation.JsonProperty("offlineTranscode") private final java.lang.Double offlineTranscode; + @com.fasterxml.jackson.annotation.JsonProperty("ownerFeatures") private final java.lang.String ownerFeatures; + @com.fasterxml.jackson.annotation.JsonProperty("photoAutoTag") private final java.lang.Boolean photoAutoTag; + @com.fasterxml.jackson.annotation.JsonProperty("platform") private final java.lang.String platform; + @com.fasterxml.jackson.annotation.JsonProperty("platformVersion") private final java.lang.String platformVersion; + @com.fasterxml.jackson.annotation.JsonProperty("pluginHost") private final java.lang.Boolean pluginHost; + @com.fasterxml.jackson.annotation.JsonProperty("pushNotifications") private final java.lang.Boolean pushNotifications; + @com.fasterxml.jackson.annotation.JsonProperty("readOnlyLibraries") private final java.lang.Boolean readOnlyLibraries; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("streamingBrainABRVersion") private final java.lang.Double streamingBrainAbrversion; + @com.fasterxml.jackson.annotation.JsonProperty("streamingBrainVersion") private final java.lang.Double streamingBrainVersion; + @com.fasterxml.jackson.annotation.JsonProperty("sync") private final java.lang.Boolean sync; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderActiveVideoSessions") private final java.lang.Double transcoderActiveVideoSessions; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderAudio") private final java.lang.Boolean transcoderAudio; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderLyrics") private final java.lang.Boolean transcoderLyrics; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderPhoto") private final java.lang.Boolean transcoderPhoto; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderSubtitles") private final java.lang.Boolean transcoderSubtitles; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderVideo") private final java.lang.Boolean transcoderVideo; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderVideoBitrates") private final java.lang.String transcoderVideoBitrates; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderVideoQualities") private final java.lang.String transcoderVideoQualities; + @com.fasterxml.jackson.annotation.JsonProperty("transcoderVideoResolutions") private final java.lang.String transcoderVideoResolutions; + @com.fasterxml.jackson.annotation.JsonProperty("updatedAt") private final java.lang.Double updatedAt; + @com.fasterxml.jackson.annotation.JsonProperty("updater") private final java.lang.Boolean updater; + @com.fasterxml.jackson.annotation.JsonProperty("version") private final java.lang.String version; + @com.fasterxml.jackson.annotation.JsonProperty("voiceSearch") private final java.lang.Boolean voiceSearch; + + MediaContainer(Builder builder) { + super(builder); + + this.allowCameraUpload = builder.getAllowCameraUpload(); + this.allowChannelAccess = builder.getAllowChannelAccess(); + this.allowMediaDeletion = builder.getAllowMediaDeletion(); + this.allowSharing = builder.getAllowSharing(); + this.allowSync = builder.getAllowSync(); + this.allowTuners = builder.getAllowTuners(); + this.backgroundProcessing = builder.getBackgroundProcessing(); + this.certificate = builder.getCertificate(); + this.companionProxy = builder.getCompanionProxy(); + this.countryCode = builder.getCountryCode(); + this.diagnostics = builder.getDiagnostics(); + this.directory = builder.getDirectory(); + this.eventStream = builder.getEventStream(); + this.friendlyName = builder.getFriendlyName(); + this.hubSearch = builder.getHubSearch(); + this.itemClusters = builder.getItemClusters(); + this.livetv = builder.getLivetv(); + this.machineIdentifier = builder.getMachineIdentifier(); + this.mediaProviders = builder.getMediaProviders(); + this.multiuser = builder.getMultiuser(); + this.musicAnalysis = builder.getMusicAnalysis(); + this.myPlex = builder.getMyPlex(); + this.myPlexMappingState = builder.getMyPlexMappingState(); + this.myPlexSigninState = builder.getMyPlexSigninState(); + this.myPlexSubscription = builder.getMyPlexSubscription(); + this.myPlexUsername = builder.getMyPlexUsername(); + this.offlineTranscode = builder.getOfflineTranscode(); + this.ownerFeatures = builder.getOwnerFeatures(); + this.photoAutoTag = builder.getPhotoAutoTag(); + this.platform = builder.getPlatform(); + this.platformVersion = builder.getPlatformVersion(); + this.pluginHost = builder.getPluginHost(); + this.pushNotifications = builder.getPushNotifications(); + this.readOnlyLibraries = builder.getReadOnlyLibraries(); + this.size = builder.getSize(); + this.streamingBrainAbrversion = builder.getStreamingBrainAbrversion(); + this.streamingBrainVersion = builder.getStreamingBrainVersion(); + this.sync = builder.getSync(); + this.transcoderActiveVideoSessions = builder.getTranscoderActiveVideoSessions(); + this.transcoderAudio = builder.getTranscoderAudio(); + this.transcoderLyrics = builder.getTranscoderLyrics(); + this.transcoderPhoto = builder.getTranscoderPhoto(); + this.transcoderSubtitles = builder.getTranscoderSubtitles(); + this.transcoderVideo = builder.getTranscoderVideo(); + this.transcoderVideoBitrates = builder.getTranscoderVideoBitrates(); + this.transcoderVideoQualities = builder.getTranscoderVideoQualities(); + this.transcoderVideoResolutions = builder.getTranscoderVideoResolutions(); + this.updatedAt = builder.getUpdatedAt(); + this.updater = builder.getUpdater(); + this.version = builder.getVersion(); + this.voiceSearch = builder.getVoiceSearch(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetServerCapabilitiesResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerCapabilitiesResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerCapabilitiesResponse buildWithoutValidation() { + return new GetServerCapabilitiesResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetServerCapabilitiesResponse.MediaContainer mediaContainer; + + GetServerCapabilitiesResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/GetServerIdentityResponse.java b/src/main/java/47/one0/models/GetServerIdentityResponse.java new file mode 100644 index 00000000..e96cea0c --- /dev/null +++ b/src/main/java/47/one0/models/GetServerIdentityResponse.java @@ -0,0 +1,181 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerIdentityResponse.Builder.class) +public class GetServerIdentityResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerIdentityResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("claimed") private java.lang.Boolean claimed; + @com.fasterxml.jackson.annotation.JsonProperty("machineIdentifier") private java.lang.String machineIdentifier; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("version") private java.lang.String version; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerIdentityResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerIdentityResponse.MediaContainer buildWithoutValidation() { + return new GetServerIdentityResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("claimed") private final java.lang.Boolean claimed; + @com.fasterxml.jackson.annotation.JsonProperty("machineIdentifier") private final java.lang.String machineIdentifier; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("version") private final java.lang.String version; + + MediaContainer(Builder builder) { + super(builder); + + this.claimed = builder.getClaimed(); + this.machineIdentifier = builder.getMachineIdentifier(); + this.size = builder.getSize(); + this.version = builder.getVersion(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetServerIdentityResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerIdentityResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerIdentityResponse buildWithoutValidation() { + return new GetServerIdentityResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetServerIdentityResponse.MediaContainer mediaContainer; + + GetServerIdentityResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/GetServerListResponse.java b/src/main/java/47/one0/models/GetServerListResponse.java new file mode 100644 index 00000000..614bb1ef --- /dev/null +++ b/src/main/java/47/one0/models/GetServerListResponse.java @@ -0,0 +1,275 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerListResponse.Builder.class) +public class GetServerListResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerListResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetServerListResponse.MediaContainer.Server.Builder.class) + public static class Server extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("address") private java.lang.String address; + @com.fasterxml.jackson.annotation.JsonProperty("host") private java.lang.String host; + @com.fasterxml.jackson.annotation.JsonProperty("machineIdentifier") private java.lang.String machineIdentifier; + @com.fasterxml.jackson.annotation.JsonProperty("name") private java.lang.String name; + @com.fasterxml.jackson.annotation.JsonProperty("port") private java.lang.Double port; + @com.fasterxml.jackson.annotation.JsonProperty("version") private java.lang.String version; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerListResponse.MediaContainer.Server build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerListResponse.MediaContainer.Server buildWithoutValidation() { + return new GetServerListResponse.MediaContainer.Server(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("address") private final java.lang.String address; + @com.fasterxml.jackson.annotation.JsonProperty("host") private final java.lang.String host; + @com.fasterxml.jackson.annotation.JsonProperty("machineIdentifier") private final java.lang.String machineIdentifier; + @com.fasterxml.jackson.annotation.JsonProperty("name") private final java.lang.String name; + @com.fasterxml.jackson.annotation.JsonProperty("port") private final java.lang.Double port; + @com.fasterxml.jackson.annotation.JsonProperty("version") private final java.lang.String version; + + Server(Builder builder) { + super(builder); + + this.address = builder.getAddress(); + this.host = builder.getHost(); + this.machineIdentifier = builder.getMachineIdentifier(); + this.name = builder.getName(); + this.port = builder.getPort(); + this.version = builder.getVersion(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("Server") private java.util.List server; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerListResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerListResponse.MediaContainer buildWithoutValidation() { + return new GetServerListResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("Server") private final java.util.List server; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + + MediaContainer(Builder builder) { + super(builder); + + this.server = builder.getServer(); + this.size = builder.getSize(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetServerListResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetServerListResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetServerListResponse buildWithoutValidation() { + return new GetServerListResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetServerListResponse.MediaContainer mediaContainer; + + GetServerListResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/GetTranscodeSessionsResponse.java b/src/main/java/47/one0/models/GetTranscodeSessionsResponse.java new file mode 100644 index 00000000..ca044104 --- /dev/null +++ b/src/main/java/47/one0/models/GetTranscodeSessionsResponse.java @@ -0,0 +1,323 @@ +package 47.one0.models; + +@lombok.Getter +@lombok.EqualsAndHashCode(callSuper = false) +@lombok.ToString +@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) +@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetTranscodeSessionsResponse.Builder.class) +public class GetTranscodeSessionsResponse extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetTranscodeSessionsResponse.MediaContainer.Builder.class) + public static class MediaContainer extends 47.one0.models.BaseModel { + @lombok.Getter + @lombok.EqualsAndHashCode(callSuper = false) + @lombok.ToString + @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) + @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = GetTranscodeSessionsResponse.MediaContainer.TranscodeSession.Builder.class) + public static class TranscodeSession extends 47.one0.models.BaseModel { + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("audioChannels") private java.lang.Double audioChannels; + @com.fasterxml.jackson.annotation.JsonProperty("audioCodec") private java.lang.String audioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("audioDecision") private java.lang.String audioDecision; + @com.fasterxml.jackson.annotation.JsonProperty("complete") private java.lang.Boolean complete; + @com.fasterxml.jackson.annotation.JsonProperty("container") private java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("context") private java.lang.String context; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("error") private java.lang.Boolean error; + @com.fasterxml.jackson.annotation.JsonProperty("key") private java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("maxOffsetAvailable") private java.lang.Double maxOffsetAvailable; + @com.fasterxml.jackson.annotation.JsonProperty("minOffsetAvailable") private java.lang.Double minOffsetAvailable; + @com.fasterxml.jackson.annotation.JsonProperty("progress") private java.lang.Double progress; + @com.fasterxml.jackson.annotation.JsonProperty("protocol") private java.lang.String protocol; + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("sourceAudioCodec") private java.lang.String sourceAudioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("sourceVideoCodec") private java.lang.String sourceVideoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("speed") private java.lang.Double speed; + @com.fasterxml.jackson.annotation.JsonProperty("throttled") private java.lang.Boolean throttled; + @com.fasterxml.jackson.annotation.JsonProperty("timeStamp") private java.lang.Double timeStamp; + @com.fasterxml.jackson.annotation.JsonProperty("transcodeHwRequested") private java.lang.Boolean transcodeHwRequested; + @com.fasterxml.jackson.annotation.JsonProperty("videoCodec") private java.lang.String videoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("videoDecision") private java.lang.String videoDecision; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetTranscodeSessionsResponse.MediaContainer.TranscodeSession build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetTranscodeSessionsResponse.MediaContainer.TranscodeSession buildWithoutValidation() { + return new GetTranscodeSessionsResponse.MediaContainer.TranscodeSession(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("audioChannels") private final java.lang.Double audioChannels; + @com.fasterxml.jackson.annotation.JsonProperty("audioCodec") private final java.lang.String audioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("audioDecision") private final java.lang.String audioDecision; + @com.fasterxml.jackson.annotation.JsonProperty("complete") private final java.lang.Boolean complete; + @com.fasterxml.jackson.annotation.JsonProperty("container") private final java.lang.String container; + @com.fasterxml.jackson.annotation.JsonProperty("context") private final java.lang.String context; + @com.fasterxml.jackson.annotation.JsonProperty("duration") private final java.lang.Double duration; + @com.fasterxml.jackson.annotation.JsonProperty("error") private final java.lang.Boolean error; + @com.fasterxml.jackson.annotation.JsonProperty("key") private final java.lang.String key; + @com.fasterxml.jackson.annotation.JsonProperty("maxOffsetAvailable") private final java.lang.Double maxOffsetAvailable; + @com.fasterxml.jackson.annotation.JsonProperty("minOffsetAvailable") private final java.lang.Double minOffsetAvailable; + @com.fasterxml.jackson.annotation.JsonProperty("progress") private final java.lang.Double progress; + @com.fasterxml.jackson.annotation.JsonProperty("protocol") private final java.lang.String protocol; + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("sourceAudioCodec") private final java.lang.String sourceAudioCodec; + @com.fasterxml.jackson.annotation.JsonProperty("sourceVideoCodec") private final java.lang.String sourceVideoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("speed") private final java.lang.Double speed; + @com.fasterxml.jackson.annotation.JsonProperty("throttled") private final java.lang.Boolean throttled; + @com.fasterxml.jackson.annotation.JsonProperty("timeStamp") private final java.lang.Double timeStamp; + @com.fasterxml.jackson.annotation.JsonProperty("transcodeHwRequested") private final java.lang.Boolean transcodeHwRequested; + @com.fasterxml.jackson.annotation.JsonProperty("videoCodec") private final java.lang.String videoCodec; + @com.fasterxml.jackson.annotation.JsonProperty("videoDecision") private final java.lang.String videoDecision; + + TranscodeSession(Builder builder) { + super(builder); + + this.audioChannels = builder.getAudioChannels(); + this.audioCodec = builder.getAudioCodec(); + this.audioDecision = builder.getAudioDecision(); + this.complete = builder.getComplete(); + this.container = builder.getContainer(); + this.context = builder.getContext(); + this.duration = builder.getDuration(); + this.error = builder.getError(); + this.key = builder.getKey(); + this.maxOffsetAvailable = builder.getMaxOffsetAvailable(); + this.minOffsetAvailable = builder.getMinOffsetAvailable(); + this.progress = builder.getProgress(); + this.protocol = builder.getProtocol(); + this.size = builder.getSize(); + this.sourceAudioCodec = builder.getSourceAudioCodec(); + this.sourceVideoCodec = builder.getSourceVideoCodec(); + this.speed = builder.getSpeed(); + this.throttled = builder.getThrottled(); + this.timeStamp = builder.getTimeStamp(); + this.transcodeHwRequested = builder.getTranscodeHwRequested(); + this.videoCodec = builder.getVideoCodec(); + this.videoDecision = builder.getVideoDecision(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("size") private java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("TranscodeSession") private java.util.List transcodeSession; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetTranscodeSessionsResponse.MediaContainer build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetTranscodeSessionsResponse.MediaContainer buildWithoutValidation() { + return new GetTranscodeSessionsResponse.MediaContainer(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.asList(this.getClass().getDeclaredFields()).stream() + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("size") private final java.lang.Double size; + @com.fasterxml.jackson.annotation.JsonProperty("TranscodeSession") private final java.util.List transcodeSession; + + MediaContainer(Builder builder) { + super(builder); + + this.size = builder.getSize(); + this.transcodeSession = builder.getTranscodeSession(); + } + } + + + @lombok.Getter + @lombok.Setter + @lombok.experimental.Accessors(chain = true) + @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(buildMethodName = "buildWithoutValidation", withPrefix = "set") + public static class Builder extends 47.one0.models.BaseModel.Builder { + static final java.util.Set> REQUIRED_FIELDS_GROUPS; + + static { + java.lang.String[][] requiredFieldsGroups = + new java.lang.String[][] { + + }; + + REQUIRED_FIELDS_GROUPS = + java.util.Arrays.stream(requiredFieldsGroups) + .map((group) -> java.util.Arrays.stream(group).collect(java.util.stream.Collectors.toSet())) + .collect(java.util.stream.Collectors.toSet()); + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private GetTranscodeSessionsResponse.MediaContainer mediaContainer; + + public Builder() { + super(ValidationType.ALL_OF); + } + + protected Builder(BaseModel.Builder.ValidationType validationType) { + super(validationType); + } + + public GetTranscodeSessionsResponse build() { + String validateMsg = validate(); + + if (validateMsg != null) { + throw new 47.one0.exceptions.ApiException(validateMsg); + } + + return buildWithoutValidation(); + } + + public GetTranscodeSessionsResponse buildWithoutValidation() { + return new GetTranscodeSessionsResponse(this); + } + + @Override + protected java.util.Set getNonNullInstanceFieldNames() { + // Introspect the class to get a list of all declared fields. + return java.util.Arrays.stream(this.getClass().getDeclaredFields()) + .filter( + (field) -> { + try { + // Filter fields that are non-static and have values that are not null. + return !java.lang.reflect.Modifier.isStatic(field.getModifiers()) && field.get(this) != null; + } catch (IllegalArgumentException | IllegalAccessException e) { + // This should never happen... + + throw new 47.one0.exceptions.ApiException( + "Unexpected exception thrown while accessing instance fields.", e); + } + }) + .map(java.lang.reflect.Field::getName) + .collect(java.util.stream.Collectors.toSet()); + } + + @Override + protected java.util.Set> getRequiredFieldsGroups() { + return REQUIRED_FIELDS_GROUPS; + } + } + + @com.fasterxml.jackson.annotation.JsonProperty("MediaContainer") private final GetTranscodeSessionsResponse.MediaContainer mediaContainer; + + GetTranscodeSessionsResponse(Builder builder) { + super(builder); + + this.mediaContainer = builder.getMediaContainer(); + } +} diff --git a/src/main/java/47/one0/models/IncludeDetails.java b/src/main/java/47/one0/models/IncludeDetails.java new file mode 100644 index 00000000..3d57bdd1 --- /dev/null +++ b/src/main/java/47/one0/models/IncludeDetails.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum IncludeDetails { + V1(1); + + public final Float label; +} diff --git a/src/main/java/47/one0/models/Level.java b/src/main/java/47/one0/models/Level.java new file mode 100644 index 00000000..2b5ae513 --- /dev/null +++ b/src/main/java/47/one0/models/Level.java @@ -0,0 +1,14 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Level { + V1(1), + V2(2), + V3(3), + V4(4); + + public final Float label; +} diff --git a/src/main/java/47/one0/models/MinSize.java b/src/main/java/47/one0/models/MinSize.java new file mode 100644 index 00000000..8fa4739e --- /dev/null +++ b/src/main/java/47/one0/models/MinSize.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum MinSize { + V1(1); + + public final Float label; +} diff --git a/src/main/java/47/one0/models/OnlyTransient.java b/src/main/java/47/one0/models/OnlyTransient.java new file mode 100644 index 00000000..17aa8545 --- /dev/null +++ b/src/main/java/47/one0/models/OnlyTransient.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum OnlyTransient { + V1(1); + + public final Float label; +} diff --git a/src/main/java/47/one0/models/PlaylistType.java b/src/main/java/47/one0/models/PlaylistType.java new file mode 100644 index 00000000..bfa87241 --- /dev/null +++ b/src/main/java/47/one0/models/PlaylistType.java @@ -0,0 +1,13 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum PlaylistType { + AUDIO("audio"), + VIDEO("video"), + PHOTO("photo"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/README.md b/src/main/java/47/one0/models/README.md new file mode 100644 index 00000000..7b315dee --- /dev/null +++ b/src/main/java/47/one0/models/README.md @@ -0,0 +1,90 @@ +# PlexSDK Models + +A list of all models. +- [Level](#level) +- [Upscale](#upscale) +- [Type](#type) +- [Smart](#smart) +- [Force](#force) +- [SecurityType](#securitytype) +- [Scope](#scope) +- [Download](#download) +- [Tonight](#tonight) +- [Skip](#skip) +- [State](#state) +- [GetServerCapabilitiesResponse](#getservercapabilitiesresponse) +- [GetServerActivitiesResponse](#getserveractivitiesresponse) +- [GetButlerTasksResponse](#getbutlertasksresponse) +- [GetAvailableClientsResponse](#getavailableclientsresponse) +- [GetDevicesResponse](#getdevicesresponse) +- [GetServerIdentityResponse](#getserveridentityresponse) +- [GetRecentlyAddedResponse](#getrecentlyaddedresponse) +- [GetOnDeckResponse](#getondeckresponse) +- [GetMyPlexAccountResponse](#getmyplexaccountresponse) +- [GetSearchResultsResponse](#getsearchresultsresponse) +- [GetServerListResponse](#getserverlistresponse) +- [GetTranscodeSessionsResponse](#gettranscodesessionsresponse) +- [TaskName](#taskname) +- [OnlyTransient](#onlytransient) +- [IncludeDetails](#includedetails) +- [MinSize](#minsize) +- [PlaylistType](#playlisttype) + +## Level + +## Upscale + +## Type + +## Smart + +## Force + +## SecurityType + +## Scope + +## Download + +## Tonight + +## Skip + +## State + +## GetServerCapabilitiesResponse + +## GetServerActivitiesResponse + +## GetButlerTasksResponse + +## GetAvailableClientsResponse + +## GetDevicesResponse + +## GetServerIdentityResponse + +## GetRecentlyAddedResponse + +## GetOnDeckResponse + +## GetMyPlexAccountResponse + +## GetSearchResultsResponse + +## GetServerListResponse + +## GetTranscodeSessionsResponse + +## TaskName + +## OnlyTransient + +## IncludeDetails + +## MinSize + +## PlaylistType + + + diff --git a/src/main/java/47/one0/models/Scope.java b/src/main/java/47/one0/models/Scope.java new file mode 100644 index 00000000..55a93e76 --- /dev/null +++ b/src/main/java/47/one0/models/Scope.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Scope { + ALL("all"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/SecurityType.java b/src/main/java/47/one0/models/SecurityType.java new file mode 100644 index 00000000..68ec7afb --- /dev/null +++ b/src/main/java/47/one0/models/SecurityType.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum SecurityType { + DELEGATION("delegation"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/Skip.java b/src/main/java/47/one0/models/Skip.java new file mode 100644 index 00000000..b0759c03 --- /dev/null +++ b/src/main/java/47/one0/models/Skip.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Skip { + V1("1"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/Smart.java b/src/main/java/47/one0/models/Smart.java new file mode 100644 index 00000000..72a2b017 --- /dev/null +++ b/src/main/java/47/one0/models/Smart.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Smart { + V1(1); + + public final Float label; +} diff --git a/src/main/java/47/one0/models/State.java b/src/main/java/47/one0/models/State.java new file mode 100644 index 00000000..fa72aa55 --- /dev/null +++ b/src/main/java/47/one0/models/State.java @@ -0,0 +1,13 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum State { + PLAYING("playing"), + PAUSED("paused"), + STOPPED("stopped"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/TaskName.java b/src/main/java/47/one0/models/TaskName.java new file mode 100644 index 00000000..2e197b2f --- /dev/null +++ b/src/main/java/47/one0/models/TaskName.java @@ -0,0 +1,24 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum TaskName { + BACKUPDATABASE("BackupDatabase"), + BUILDGRACENOTECOLLECTIONS("BuildGracenoteCollections"), + CHECKFORUPDATES("CheckForUpdates"), + CLEANOLDBUNDLES("CleanOldBundles"), + CLEANOLDCACHEFILES("CleanOldCacheFiles"), + DEEPMEDIAANALYSIS("DeepMediaAnalysis"), + GENERATEAUTOTAGS("GenerateAutoTags"), + GENERATECHAPTERTHUMBS("GenerateChapterThumbs"), + GENERATEMEDIAINDEXFILES("GenerateMediaIndexFiles"), + OPTIMIZEDATABASE("OptimizeDatabase"), + REFRESHLIBRARIES("RefreshLibraries"), + REFRESHLOCALMEDIA("RefreshLocalMedia"), + REFRESHPERIODICMETADATA("RefreshPeriodicMetadata"), + UPGRADEMEDIAANALYSIS("UpgradeMediaAnalysis"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/Tonight.java b/src/main/java/47/one0/models/Tonight.java new file mode 100644 index 00000000..8f7766ff --- /dev/null +++ b/src/main/java/47/one0/models/Tonight.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Tonight { + V1("1"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/Type.java b/src/main/java/47/one0/models/Type.java new file mode 100644 index 00000000..ce5c59cf --- /dev/null +++ b/src/main/java/47/one0/models/Type.java @@ -0,0 +1,13 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Type { + AUDIO("audio"), + VIDEO("video"), + PHOTO("photo"); + + public final String label; +} diff --git a/src/main/java/47/one0/models/Upscale.java b/src/main/java/47/one0/models/Upscale.java new file mode 100644 index 00000000..bbf79004 --- /dev/null +++ b/src/main/java/47/one0/models/Upscale.java @@ -0,0 +1,11 @@ +package 47.one0.models; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum Upscale { + V1(1); + + public final Float label; +} diff --git a/src/main/java/47/one0/services/ActivitiesService.java b/src/main/java/47/one0/services/ActivitiesService.java new file mode 100644 index 00000000..7503c912 --- /dev/null +++ b/src/main/java/47/one0/services/ActivitiesService.java @@ -0,0 +1,56 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class ActivitiesService extends BaseService implements ActivitiesClient { +public ActivitiesService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Get Server Activities + */ + public ResponseWithHeaders<47.one0.models.GetServerActivitiesResponse> getServerActivities() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("activities") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetServerActivitiesResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetServerActivitiesResponse>() {}), response.headers()); +} + /** + * @summary Cancel Server Activities + * @param {String} activityUUID - The UUID of the activity to cancel. + */ + public ResponseWithHeaders cancelServerActivities(String activityUUID) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("activities") +.addPathParameter(String.valueOf(activityUUID)) +.build(); +Request request = new Request.Builder().url(url) +.delete() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/BaseService.java b/src/main/java/47/one0/services/BaseService.java new file mode 100644 index 00000000..0d0affb9 --- /dev/null +++ b/src/main/java/47/one0/services/BaseService.java @@ -0,0 +1,55 @@ +package 47.one0.services; +import 47.one0.http.ModelConverter; +import 47.one0.Configuration; +import 47.one0.models.*; +import 47.one0.exceptions.ApiException; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + + +import okhttp3.Headers; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class BaseService { + protected OkHttpClient httpClient; + protected String serverUrl; + + + public BaseService(OkHttpClient httpClient, String serverUrl) { + this.httpClient = httpClient; + this.serverUrl = serverUrl; + + } + + public void setBaseUrl(String serverUrl) { + this.serverUrl = serverUrl; + } + + protected Response execute(Request request) throws ApiException { + Response response; + try { + + response = this.httpClient.newCall(request).execute(); + + } catch (IOException e) { + ApiException apiException = new ApiException(e.getMessage()); + + throw apiException; + } + if (response.isSuccessful()) { + return response; + } else { + ApiException apiException = new ApiException(response.code()); + + throw apiException; + } + } + + +} diff --git a/src/main/java/47/one0/services/ButlerService.java b/src/main/java/47/one0/services/ButlerService.java new file mode 100644 index 00000000..1131f651 --- /dev/null +++ b/src/main/java/47/one0/services/ButlerService.java @@ -0,0 +1,126 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class ButlerService extends BaseService implements ButlerClient { +public ButlerService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Get Butler tasks + */ + public ResponseWithHeaders<47.one0.models.GetButlerTasksResponse> getButlerTasks() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("butler") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetButlerTasksResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetButlerTasksResponse>() {}), response.headers()); +} + /** + * @summary Start all Butler tasks + */ + public ResponseWithHeaders startAllTasks() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("butler") +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.post(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Stop all Butler tasks + */ + public ResponseWithHeaders stopAllTasks() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("butler") +.build(); +Request request = new Request.Builder().url(url) +.delete() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Start a single Butler task + * @param {String} taskName - the name of the task to be started. + */ + public ResponseWithHeaders startTask(String taskName) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("butler") +.addPathParameter(String.valueOf(taskName)) +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.post(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Stop a single Butler task + * @param {String} taskName - The name of the task to be started. + */ + public ResponseWithHeaders stopTask(String taskName) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("butler") +.addPathParameter(String.valueOf(taskName)) +.build(); +Request request = new Request.Builder().url(url) +.delete() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/HubsService.java b/src/main/java/47/one0/services/HubsService.java new file mode 100644 index 00000000..a65dbd80 --- /dev/null +++ b/src/main/java/47/one0/services/HubsService.java @@ -0,0 +1,70 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class HubsService extends BaseService implements HubsClient { +public HubsService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Get Global Hubs + * @param {Number} [count] - The number of items to return with each hub. + * @param {Number} [onlyTransient] - Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). + */ + public ResponseWithHeaders getGlobalHubs(Float count, Float onlyTransient) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("hubs") +.addOptionalQueryParameter("count", count) +.addOptionalQueryParameter("onlyTransient", onlyTransient) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get library specific hubs + * @param {Number} sectionId - the Id of the library to query + * @param {Number} [count] - The number of items to return with each hub. + * @param {Number} [onlyTransient] - Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). + */ + public ResponseWithHeaders getLibraryHubs(Float sectionId, Float count, Float onlyTransient) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("hubs") +.addPathParameter("sections") +.addPathParameter(String.valueOf(sectionId)) +.addOptionalQueryParameter("count", count) +.addOptionalQueryParameter("onlyTransient", onlyTransient) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/LibraryService.java b/src/main/java/47/one0/services/LibraryService.java new file mode 100644 index 00000000..dc871f66 --- /dev/null +++ b/src/main/java/47/one0/services/LibraryService.java @@ -0,0 +1,302 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class LibraryService extends BaseService implements LibraryClient { +public LibraryService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Get Hash Value + * @param {String} url - This is the path to the local file, must be prefixed by `file://` + * @param {Number} [type] - Item type + */ + public ResponseWithHeaders getFileHash(String url, Float type) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("hashes") +.addRequiredQueryParameter("url", url) +.addOptionalQueryParameter("type", type) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Recently Added + */ + public ResponseWithHeaders<47.one0.models.GetRecentlyAddedResponse> getRecentlyAdded() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("recentlyAdded") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetRecentlyAddedResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetRecentlyAddedResponse>() {}), response.headers()); +} + /** + * @summary Get All Libraries + */ + public ResponseWithHeaders getLibraries() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("sections") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Library Details + * @param {Number} sectionId - the Id of the library to query + * @param {Number} [includeDetails] - Whether or not to include details for a section (types, filters, and sorts). +Only exists for backwards compatibility, media providers other than the server libraries have it on always. + + */ + public ResponseWithHeaders getLibrary(Float sectionId, Float includeDetails) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("sections") +.addPathParameter(String.valueOf(sectionId)) +.addOptionalQueryParameter("includeDetails", includeDetails) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Delete Library Section + * @param {Number} sectionId - the Id of the library to query + */ + public ResponseWithHeaders deleteLibrary(Float sectionId) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("sections") +.addPathParameter(String.valueOf(sectionId)) +.build(); +Request request = new Request.Builder().url(url) +.delete() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Library Items + * @param {Number} sectionId - the Id of the library to query + * @param {Number} [type] - item type + * @param {String} [filter] - the filter parameter + */ + public ResponseWithHeaders getLibraryItems(Float sectionId, Float type, String filter) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("sections") +.addPathParameter(String.valueOf(sectionId)) +.addPathParameter("all") +.addOptionalQueryParameter("type", type) +.addOptionalQueryParameter("filter", filter) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Refresh Library + * @param {Number} sectionId - the Id of the library to refresh + */ + public ResponseWithHeaders refreshLibrary(Float sectionId) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("sections") +.addPathParameter(String.valueOf(sectionId)) +.addPathParameter("refresh") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Latest Library Items + * @param {Number} sectionId - the Id of the library to query + * @param {Number} type - item type + * @param {String} [filter] - the filter parameter + */ + public ResponseWithHeaders getLatestLibraryItems(Float sectionId, Float type, String filter) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("sections") +.addPathParameter(String.valueOf(sectionId)) +.addPathParameter("latest") +.addRequiredQueryParameter("type", type) +.addOptionalQueryParameter("filter", filter) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Common Library Items + * @param {Number} sectionId - the Id of the library to query + * @param {Number} type - item type + * @param {String} [filter] - the filter parameter + */ + public ResponseWithHeaders getCommonLibraryItems(Float sectionId, Float type, String filter) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("sections") +.addPathParameter(String.valueOf(sectionId)) +.addPathParameter("common") +.addRequiredQueryParameter("type", type) +.addOptionalQueryParameter("filter", filter) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Items Metadata + * @param {Number} ratingKey - the id of the library item to return the children of. + */ + public ResponseWithHeaders getMetadata(Float ratingKey) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("metadata") +.addPathParameter(String.valueOf(ratingKey)) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Items Children + * @param {Number} ratingKey - the id of the library item to return the children of. + */ + public ResponseWithHeaders getMetadataChildren(Float ratingKey) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("metadata") +.addPathParameter(String.valueOf(ratingKey)) +.addPathParameter("children") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get On Deck + */ + public ResponseWithHeaders<47.one0.models.GetOnDeckResponse> getOnDeck() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("library") +.addPathParameter("onDeck") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetOnDeckResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetOnDeckResponse>() {}), response.headers()); +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/LogService.java b/src/main/java/47/one0/services/LogService.java new file mode 100644 index 00000000..5e9e1521 --- /dev/null +++ b/src/main/java/47/one0/services/LogService.java @@ -0,0 +1,96 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class LogService extends BaseService implements LogClient { +public LogService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Logging a single line message. + * @param {Number} level - An integer log level to write to the PMS log with. +0: Error +1: Warning +2: Info +3: Debug +4: Verbose + + * @param {String} message - The text of the message to write to the log. + * @param {String} source - a string indicating the source of the message. + */ + public ResponseWithHeaders logLine(Float level, String message, String source) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("log") +.addRequiredQueryParameter("level", level) +.addRequiredQueryParameter("message", message) +.addRequiredQueryParameter("source", source) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Logging a multi-line message + */ + public ResponseWithHeaders logMultiLine() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("log") +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.post(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Enabling Papertrail + */ + public ResponseWithHeaders enablePaperTrail() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("log") +.addPathParameter("networked") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/MediaService.java b/src/main/java/47/one0/services/MediaService.java new file mode 100644 index 00000000..6798a898 --- /dev/null +++ b/src/main/java/47/one0/services/MediaService.java @@ -0,0 +1,96 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class MediaService extends BaseService implements MediaClient { +public MediaService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Mark Media Played + * @param {Number} key - The media key to mark as played + */ + public ResponseWithHeaders markPlayed(Float key) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter(":") +.addPathParameter("scrobble") +.addRequiredQueryParameter("key", key) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Mark Media Unplayed + * @param {Number} key - The media key to mark as Unplayed + */ + public ResponseWithHeaders markUnplayed(Float key) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter(":") +.addPathParameter("unscrobble") +.addRequiredQueryParameter("key", key) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Update Media Play Progress + * @param {String} key - the media key + * @param {Number} time - The time, in milliseconds, used to set the media playback progress. + * @param {String} state - The playback state of the media item. + */ + public ResponseWithHeaders updatePlayProgress(String key, Float time, String state) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter(":") +.addPathParameter("progress") +.addRequiredQueryParameter("key", key) +.addRequiredQueryParameter("time", time) +.addRequiredQueryParameter("state", state) +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.post(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/PlaylistsService.java b/src/main/java/47/one0/services/PlaylistsService.java new file mode 100644 index 00000000..3015888a --- /dev/null +++ b/src/main/java/47/one0/services/PlaylistsService.java @@ -0,0 +1,264 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class PlaylistsService extends BaseService implements PlaylistsClient { +public PlaylistsService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Create a Playlist + * @param {String} title - name of the playlist + * @param {String} type - type of playlist to create + * @param {Number} smart - whether the playlist is smart or not + * @param {String} [uri] - the content URI for the playlist + * @param {Number} [playQueueID] - the play queue to copy to a playlist + */ + public ResponseWithHeaders createPlaylist(String title, String type, Float smart, String uri, Float playQueueID) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addRequiredQueryParameter("title", title) +.addRequiredQueryParameter("type", type) +.addRequiredQueryParameter("smart", smart) +.addOptionalQueryParameter("uri", uri) +.addOptionalQueryParameter("playQueueID", playQueueID) +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.post(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get All Playlists + * @param {String} [playlistType] - limit to a type of playlist. + * @param {Number} [smart] - type of playlists to return (default is all). + */ + public ResponseWithHeaders getPlaylists(String playlistType, Float smart) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addPathParameter("all") +.addOptionalQueryParameter("playlistType", playlistType) +.addOptionalQueryParameter("smart", smart) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Retrieve Playlist + * @param {Number} playlistID - the ID of the playlist + */ + public ResponseWithHeaders getPlaylist(Float playlistID) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addPathParameter(String.valueOf(playlistID)) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Update a Playlist + * @param {Number} playlistID - the ID of the playlist + */ + public ResponseWithHeaders updatePlaylist(Float playlistID) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addPathParameter(String.valueOf(playlistID)) +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.put(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Deletes a Playlist + * @param {Number} playlistID - the ID of the playlist + */ + public ResponseWithHeaders deletePlaylist(Float playlistID) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addPathParameter(String.valueOf(playlistID)) +.build(); +Request request = new Request.Builder().url(url) +.delete() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Retrieve Playlist Contents + * @param {Number} playlistID - the ID of the playlist + * @param {Number} type - the metadata type of the item to return + */ + public ResponseWithHeaders getPlaylistContents(Float playlistID, Float type) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addPathParameter(String.valueOf(playlistID)) +.addPathParameter("items") +.addRequiredQueryParameter("type", type) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Adding to a Playlist + * @param {Number} playlistID - the ID of the playlist + * @param {String} uri - the content URI for the playlist + * @param {Number} playQueueID - the play queue to add to a playlist + */ + public ResponseWithHeaders addPlaylistContents(Float playlistID, String uri, Float playQueueID) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addPathParameter(String.valueOf(playlistID)) +.addPathParameter("items") +.addRequiredQueryParameter("uri", uri) +.addRequiredQueryParameter("playQueueID", playQueueID) +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.put(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Delete Playlist Contents + * @param {Number} playlistID - the ID of the playlist + */ + public ResponseWithHeaders clearPlaylistContents(Float playlistID) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addPathParameter(String.valueOf(playlistID)) +.addPathParameter("items") +.build(); +Request request = new Request.Builder().url(url) +.delete() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Upload Playlist + * @param {String} path - absolute path to a directory on the server where m3u files are stored, or the absolute path to a playlist file on the server. +If the `path` argument is a directory, that path will be scanned for playlist files to be processed. +Each file in that directory creates a separate playlist, with a name based on the filename of the file that created it. +The GUID of each playlist is based on the filename. +If the `path` argument is a file, that file will be used to create a new playlist, with the name based on the filename of the file that created it. +The GUID of each playlist is based on the filename. + + * @param {Number} force - force overwriting of duplicate playlists. By default, a playlist file uploaded with the same path will overwrite the existing playlist. +The `force` argument is used to disable overwriting. If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded. + + */ + public ResponseWithHeaders uploadPlaylist(String path, Float force) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("playlists") +.addPathParameter("upload") +.addRequiredQueryParameter("path", path) +.addRequiredQueryParameter("force", force) +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.post(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/README.md b/src/main/java/47/one0/services/README.md new file mode 100644 index 00000000..d67c2303 --- /dev/null +++ b/src/main/java/47/one0/services/README.md @@ -0,0 +1,2383 @@ +# PlexSDK Services +A list of all services and services methods. +- Services + + - [Server](#server) + + - [Media](#media) + + - [Activities](#activities) + + - [Butler](#butler) + + - [Hubs](#hubs) + + - [Search](#search) + + - [Library](#library) + + - [Log](#log) + + - [Playlists](#playlists) + + - [Security](#security) + + - [Sessions](#sessions) + + - [Updater](#updater) + + - [Video](#video) +- [All Methods](#all-methods) + + +## Server + +| Method | Description| +| :-------- | :----------| +| [getServerCapabilities](#getservercapabilities) | Server Capabilities | +| [getServerPreferences](#getserverpreferences) | Get Server Preferences | +| [getAvailableClients](#getavailableclients) | Get Available Clients | +| [getDevices](#getdevices) | Get Devices | +| [getServerIdentity](#getserveridentity) | Get Server Identity | +| [getMyPlexAccount](#getmyplexaccount) | Get MyPlex Account | +| [getResizedPhoto](#getresizedphoto) | Get a Resized Photo | +| [getServerList](#getserverlist) | Get Server List | + + +## Media + +| Method | Description| +| :-------- | :----------| +| [markPlayed](#markplayed) | Mark Media Played | +| [markUnplayed](#markunplayed) | Mark Media Unplayed | +| [updatePlayProgress](#updateplayprogress) | Update Media Play Progress | + + +## Activities + +| Method | Description| +| :-------- | :----------| +| [getServerActivities](#getserveractivities) | Get Server Activities | +| [cancelServerActivities](#cancelserveractivities) | Cancel Server Activities | + + +## Butler + +| Method | Description| +| :-------- | :----------| +| [startAllTasks](#startalltasks) | Start all Butler tasks | +| [getButlerTasks](#getbutlertasks) | Get Butler tasks | +| [stopAllTasks](#stopalltasks) | Stop all Butler tasks | +| [startTask](#starttask) | Start a single Butler task | +| [stopTask](#stoptask) | Stop a single Butler task | + + +## Hubs + +| Method | Description| +| :-------- | :----------| +| [getGlobalHubs](#getglobalhubs) | Get Global Hubs | +| [getLibraryHubs](#getlibraryhubs) | Get library specific hubs | + + +## Search + +| Method | Description| +| :-------- | :----------| +| [performSearch](#performsearch) | Perform a search | +| [performVoiceSearch](#performvoicesearch) | Perform a voice search | +| [getSearchResults](#getsearchresults) | Get Search Results | + + +## Library + +| Method | Description| +| :-------- | :----------| +| [getFileHash](#getfilehash) | Get Hash Value | +| [getRecentlyAdded](#getrecentlyadded) | Get Recently Added | +| [getLibraries](#getlibraries) | Get All Libraries | +| [getLibrary](#getlibrary) | Get Library Details | +| [deleteLibrary](#deletelibrary) | Delete Library Section | +| [getLibraryItems](#getlibraryitems) | Get Library Items | +| [refreshLibrary](#refreshlibrary) | Refresh Library | +| [getLatestLibraryItems](#getlatestlibraryitems) | Get Latest Library Items | +| [getCommonLibraryItems](#getcommonlibraryitems) | Get Common Library Items | +| [getMetadata](#getmetadata) | Get Items Metadata | +| [getMetadataChildren](#getmetadatachildren) | Get Items Children | +| [getOnDeck](#getondeck) | Get On Deck | + + +## Log + +| Method | Description| +| :-------- | :----------| +| [logMultiLine](#logmultiline) | Logging a multi-line message | +| [logLine](#logline) | Logging a single line message. | +| [enablePaperTrail](#enablepapertrail) | Enabling Papertrail | + + +## Playlists + +| Method | Description| +| :-------- | :----------| +| [createPlaylist](#createplaylist) | Create a Playlist | +| [getPlaylists](#getplaylists) | Get All Playlists | +| [getPlaylist](#getplaylist) | Retrieve Playlist | +| [deletePlaylist](#deleteplaylist) | Deletes a Playlist | +| [updatePlaylist](#updateplaylist) | Update a Playlist | +| [getPlaylistContents](#getplaylistcontents) | Retrieve Playlist Contents | +| [clearPlaylistContents](#clearplaylistcontents) | Delete Playlist Contents | +| [addPlaylistContents](#addplaylistcontents) | Adding to a Playlist | +| [uploadPlaylist](#uploadplaylist) | Upload Playlist | + + +## Security + +| Method | Description| +| :-------- | :----------| +| [getTransientToken](#gettransienttoken) | Get a Transient Token. | +| [getSourceConnectionInformation](#getsourceconnectioninformation) | Get Source Connection Information | + + +## Sessions + +| Method | Description| +| :-------- | :----------| +| [getSessions](#getsessions) | Get Active Sessions | +| [getSessionHistory](#getsessionhistory) | Get Session History | +| [getTranscodeSessions](#gettranscodesessions) | Get Transcode Sessions | +| [stopTranscodeSession](#stoptranscodesession) | Stop a Transcode Session | + + +## Updater + +| Method | Description| +| :-------- | :----------| +| [getUpdateStatus](#getupdatestatus) | Querying status of updates | +| [checkForUpdates](#checkforupdates) | Checking for updates | +| [applyUpdates](#applyupdates) | Apply Updates | + + +## Video + +| Method | Description| +| :-------- | :----------| +| [startUniversalTranscode](#startuniversaltranscode) | Start Universal Transcode | +| [getTimeline](#gettimeline) | Get the timeline for a media item | + + +## All Methods + + +### **getServerCapabilities** +Server Capabilities +- HTTP Method: GET +- Endpoint: / + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetServerCapabilitiesResponse](/src/main/java/io/plexsdk/models/README.md#getservercapabilitiesresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getServerCapabilities(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getServerPreferences** +Get Server Preferences +- HTTP Method: GET +- Endpoint: /:/prefs + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getServerPreferences(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getAvailableClients** +Get Available Clients +- HTTP Method: GET +- Endpoint: /clients + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetAvailableClientsResponse](/src/main/java/io/plexsdk/models/README.md#getavailableclientsresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getAvailableClients(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getDevices** +Get Devices +- HTTP Method: GET +- Endpoint: /devices + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetDevicesResponse](/src/main/java/io/plexsdk/models/README.md#getdevicesresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getDevices(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getServerIdentity** +Get Server Identity +- HTTP Method: GET +- Endpoint: /identity + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetServerIdentityResponse](/src/main/java/io/plexsdk/models/README.md#getserveridentityresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getServerIdentity(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getMyPlexAccount** +Get MyPlex Account +- HTTP Method: GET +- Endpoint: /myplex/account + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetMyPlexAccountResponse](/src/main/java/io/plexsdk/models/README.md#getmyplexaccountresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getMyPlexAccount(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getResizedPhoto** +Get a Resized Photo +- HTTP Method: GET +- Endpoint: /photo/:/transcode + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| width | Float | Required | The width for the resized photo | +| height | Float | Required | The height for the resized photo | +| opacity | Integer | Required | The opacity for the resized photo | +| blur | Float | Required | The width for the resized photo | +| minSize | [MinSize](/src/main/java/io/plexsdk/models/README.md#minsize) | Required | images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against. | +| upscale | [Upscale](/src/main/java/io/plexsdk/models/README.md#upscale) | Required | allow images to be resized beyond native dimensions. | +| url | String | Required | path to image within Plex | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getResizedPhoto(853213706, 2, 9, 3, 3, 3, "urlSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getServerList** +Get Server List +- HTTP Method: GET +- Endpoint: /servers + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetServerListResponse](/src/main/java/io/plexsdk/models/README.md#getserverlistresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.serverService.getServerList(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **markPlayed** +Mark Media Played +- HTTP Method: GET +- Endpoint: /:/scrobble + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| key | Float | Required | The media key to mark as played | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.mediaService.markPlayed(5); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **markUnplayed** +Mark Media Unplayed +- HTTP Method: GET +- Endpoint: /:/unscrobble + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| key | Float | Required | The media key to mark as Unplayed | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.mediaService.markUnplayed(8); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **updatePlayProgress** +Update Media Play Progress +- HTTP Method: POST +- Endpoint: /:/progress + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| key | String | Required | the media key | +| time | Float | Required | The time, in milliseconds, used to set the media playback progress. | +| state | String | Required | The playback state of the media item. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.mediaService.updatePlayProgress("keySampleValue", 1, "stateSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **getServerActivities** +Get Server Activities +- HTTP Method: GET +- Endpoint: /activities + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetServerActivitiesResponse](/src/main/java/io/plexsdk/models/README.md#getserveractivitiesresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.activitiesService.getServerActivities(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **cancelServerActivities** +Cancel Server Activities +- HTTP Method: DELETE +- Endpoint: /activities/{activityUUID} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| activityUuid | String | Required | The UUID of the activity to cancel. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.activitiesService.cancelServerActivities("activityUUIDSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **startAllTasks** +Start all Butler tasks +- HTTP Method: POST +- Endpoint: /butler + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.butlerService.startAllTasks(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getButlerTasks** +Get Butler tasks +- HTTP Method: GET +- Endpoint: /butler + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetButlerTasksResponse](/src/main/java/io/plexsdk/models/README.md#getbutlertasksresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.butlerService.getButlerTasks(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **stopAllTasks** +Stop all Butler tasks +- HTTP Method: DELETE +- Endpoint: /butler + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.butlerService.stopAllTasks(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **startTask** +Start a single Butler task +- HTTP Method: POST +- Endpoint: /butler/{taskName} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| taskName | [TaskName](/src/main/java/io/plexsdk/models/README.md#taskname) | Required | the name of the task to be started. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.butlerService.startTask("taskNameSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **stopTask** +Stop a single Butler task +- HTTP Method: DELETE +- Endpoint: /butler/{taskName} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| taskName | [TaskName](/src/main/java/io/plexsdk/models/README.md#taskname) | Required | The name of the task to be started. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.butlerService.stopTask("taskNameSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **getGlobalHubs** +Get Global Hubs +- HTTP Method: GET +- Endpoint: /hubs + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| count | Float | Optional | The number of items to return with each hub. | +| onlyTransient | [OnlyTransient](/src/main/java/io/plexsdk/models/README.md#onlytransient) | Optional | Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.hubsService.getGlobalHubs(4, 4); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getLibraryHubs** +Get library specific hubs +- HTTP Method: GET +- Endpoint: /hubs/sections/{sectionId} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| sectionId | Float | Required | the Id of the library to query | +| count | Float | Optional | The number of items to return with each hub. | +| onlyTransient | [OnlyTransient](/src/main/java/io/plexsdk/models/README.md#onlytransient) | Optional | Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.hubsService.getLibraryHubs(9, 1, 8); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **performSearch** +Perform a search +- HTTP Method: GET +- Endpoint: /hubs/search + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| query | String | Required | The query term | +| sectionId | Float | Optional | This gives context to the search, and can result in re-ordering of search result hubs | +| limit | Float | Optional | The number of items to return per hub | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.searchService.performSearch("querySampleValue", 3, 9); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **performVoiceSearch** +Perform a voice search +- HTTP Method: GET +- Endpoint: /hubs/search/voice + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| query | String | Required | The query term | +| sectionId | Float | Optional | This gives context to the search, and can result in re-ordering of search result hubs | +| limit | Float | Optional | The number of items to return per hub | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.searchService.performVoiceSearch("querySampleValue", 7, 9); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getSearchResults** +Get Search Results +- HTTP Method: GET +- Endpoint: /search + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| query | String | Required | The search query string to use | + +**Return Type** + +[GetSearchResultsResponse](/src/main/java/io/plexsdk/models/README.md#getsearchresultsresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.searchService.getSearchResults("querySampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **getFileHash** +Get Hash Value +- HTTP Method: GET +- Endpoint: /library/hashes + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| url | String | Required | This is the path to the local file, must be prefixed by `file://` | +| type | Float | Optional | Item type | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getFileHash("urlSampleValue", 6); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getRecentlyAdded** +Get Recently Added +- HTTP Method: GET +- Endpoint: /library/recentlyAdded + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetRecentlyAddedResponse](/src/main/java/io/plexsdk/models/README.md#getrecentlyaddedresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getRecentlyAdded(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getLibraries** +Get All Libraries +- HTTP Method: GET +- Endpoint: /library/sections + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getLibraries(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getLibrary** +Get Library Details +- HTTP Method: GET +- Endpoint: /library/sections/{sectionId} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| sectionId | Float | Required | the Id of the library to query | +| includeDetails | [IncludeDetails](/src/main/java/io/plexsdk/models/README.md#includedetails) | Optional | Whether or not to include details for a section (types, filters, and sorts).
Only exists for backwards compatibility, media providers other than the server libraries have it on always.
| + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getLibrary(6, 7); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **deleteLibrary** +Delete Library Section +- HTTP Method: DELETE +- Endpoint: /library/sections/{sectionId} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| sectionId | Float | Required | the Id of the library to query | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.deleteLibrary(8); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getLibraryItems** +Get Library Items +- HTTP Method: GET +- Endpoint: /library/sections/{sectionId}/all + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| sectionId | Float | Required | the Id of the library to query | +| type | Float | Optional | item type | +| filter | String | Optional | the filter parameter | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getLibraryItems(9, 1, "filterSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **refreshLibrary** +Refresh Library +- HTTP Method: GET +- Endpoint: /library/sections/{sectionId}/refresh + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| sectionId | Float | Required | the Id of the library to refresh | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.refreshLibrary(2); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getLatestLibraryItems** +Get Latest Library Items +- HTTP Method: GET +- Endpoint: /library/sections/{sectionId}/latest + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| sectionId | Float | Required | the Id of the library to query | +| type | Float | Required | item type | +| filter | String | Optional | the filter parameter | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getLatestLibraryItems(5, 3, "filterSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getCommonLibraryItems** +Get Common Library Items +- HTTP Method: GET +- Endpoint: /library/sections/{sectionId}/common + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| sectionId | Float | Required | the Id of the library to query | +| type | Float | Required | item type | +| filter | String | Optional | the filter parameter | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getCommonLibraryItems(1, 8, "filterSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getMetadata** +Get Items Metadata +- HTTP Method: GET +- Endpoint: /library/metadata/{ratingKey} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| ratingKey | Float | Required | the id of the library item to return the children of. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getMetadata(5); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getMetadataChildren** +Get Items Children +- HTTP Method: GET +- Endpoint: /library/metadata/{ratingKey}/children + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| ratingKey | Float | Required | the id of the library item to return the children of. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getMetadataChildren(3); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getOnDeck** +Get On Deck +- HTTP Method: GET +- Endpoint: /library/onDeck + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetOnDeckResponse](/src/main/java/io/plexsdk/models/README.md#getondeckresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.libraryService.getOnDeck(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **logMultiLine** +Logging a multi-line message +- HTTP Method: POST +- Endpoint: /log + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.logService.logMultiLine(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **logLine** +Logging a single line message. +- HTTP Method: GET +- Endpoint: /log + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| level | [Level](/src/main/java/io/plexsdk/models/README.md#level) | Required | An integer log level to write to the PMS log with.
0: Error
1: Warning
2: Info
3: Debug
4: Verbose
| +| message | String | Required | The text of the message to write to the log. | +| source | String | Required | a string indicating the source of the message. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.logService.logLine(9, "messageSampleValue", "sourceSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **enablePaperTrail** +Enabling Papertrail +- HTTP Method: GET +- Endpoint: /log/networked + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.logService.enablePaperTrail(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **createPlaylist** +Create a Playlist +- HTTP Method: POST +- Endpoint: /playlists + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| title | String | Required | name of the playlist | +| type | [Type](/src/main/java/io/plexsdk/models/README.md#type) | Required | type of playlist to create | +| smart | [Smart](/src/main/java/io/plexsdk/models/README.md#smart) | Required | whether the playlist is smart or not | +| uri | String | Optional | the content URI for the playlist | +| playQueueId | Float | Optional | the play queue to copy to a playlist | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.createPlaylist("titleSampleValue", "typeSampleValue", 2, "uriSampleValue", 1); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getPlaylists** +Get All Playlists +- HTTP Method: GET +- Endpoint: /playlists/all + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| playlistType | [PlaylistType](/src/main/java/io/plexsdk/models/README.md#playlisttype) | Optional | limit to a type of playlist. | +| smart | [Smart](/src/main/java/io/plexsdk/models/README.md#smart) | Optional | type of playlists to return (default is all). | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.getPlaylists("playlistTypeSampleValue", 9); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getPlaylist** +Retrieve Playlist +- HTTP Method: GET +- Endpoint: /playlists/{playlistID} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| playlistId | Float | Required | the ID of the playlist | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.getPlaylist(4); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **deletePlaylist** +Deletes a Playlist +- HTTP Method: DELETE +- Endpoint: /playlists/{playlistID} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| playlistId | Float | Required | the ID of the playlist | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.deletePlaylist(1); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **updatePlaylist** +Update a Playlist +- HTTP Method: PUT +- Endpoint: /playlists/{playlistID} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| playlistId | Float | Required | the ID of the playlist | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.updatePlaylist(7); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getPlaylistContents** +Retrieve Playlist Contents +- HTTP Method: GET +- Endpoint: /playlists/{playlistID}/items + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| playlistId | Float | Required | the ID of the playlist | +| type | Float | Required | the metadata type of the item to return | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.getPlaylistContents(3, 1); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **clearPlaylistContents** +Delete Playlist Contents +- HTTP Method: DELETE +- Endpoint: /playlists/{playlistID}/items + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| playlistId | Float | Required | the ID of the playlist | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.clearPlaylistContents(8); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **addPlaylistContents** +Adding to a Playlist +- HTTP Method: PUT +- Endpoint: /playlists/{playlistID}/items + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| playlistId | Float | Required | the ID of the playlist | +| uri | String | Required | the content URI for the playlist | +| playQueueId | Float | Required | the play queue to add to a playlist | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.addPlaylistContents(6, "uriSampleValue", 4); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **uploadPlaylist** +Upload Playlist +- HTTP Method: POST +- Endpoint: /playlists/upload + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| path | String | Required | absolute path to a directory on the server where m3u files are stored, or the absolute path to a playlist file on the server.
If the `path` argument is a directory, that path will be scanned for playlist files to be processed.
Each file in that directory creates a separate playlist, with a name based on the filename of the file that created it.
The GUID of each playlist is based on the filename.
If the `path` argument is a file, that file will be used to create a new playlist, with the name based on the filename of the file that created it.
The GUID of each playlist is based on the filename.
| +| force | [Force](/src/main/java/io/plexsdk/models/README.md#force) | Required | force overwriting of duplicate playlists. By default, a playlist file uploaded with the same path will overwrite the existing playlist.
The `force` argument is used to disable overwriting. If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded.
| + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.playlistsService.uploadPlaylist("pathSampleValue", 5); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **getTransientToken** +Get a Transient Token. +- HTTP Method: GET +- Endpoint: /security/token + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| type | [SecurityType](/src/main/java/io/plexsdk/models/README.md#securitytype) | Required | `delegation` - This is the only supported `type` parameter. | +| scope | [Scope](/src/main/java/io/plexsdk/models/README.md#scope) | Required | `all` - This is the only supported `scope` parameter. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.securityService.getTransientToken("typeSampleValue", "scopeSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getSourceConnectionInformation** +Get Source Connection Information +- HTTP Method: GET +- Endpoint: /security/resources + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| source | String | Required | The source identifier with an included prefix. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.securityService.getSourceConnectionInformation("sourceSampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **getSessions** +Get Active Sessions +- HTTP Method: GET +- Endpoint: /status/sessions + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.sessionsService.getSessions(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getSessionHistory** +Get Session History +- HTTP Method: GET +- Endpoint: /status/sessions/history/all + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.sessionsService.getSessionHistory(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getTranscodeSessions** +Get Transcode Sessions +- HTTP Method: GET +- Endpoint: /transcode/sessions + + +**Parameters** + +This method has no parameters. + +**Return Type** + +[GetTranscodeSessionsResponse](/src/main/java/io/plexsdk/models/README.md#gettranscodesessionsresponse) + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.sessionsService.getTranscodeSessions(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **stopTranscodeSession** +Stop a Transcode Session +- HTTP Method: DELETE +- Endpoint: /transcode/sessions/{sessionKey} + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| sessionKey | String | Required | the Key of the transcode session to stop | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.sessionsService.stopTranscodeSession("sessionKeySampleValue"); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **getUpdateStatus** +Querying status of updates +- HTTP Method: GET +- Endpoint: /updater/status + + +**Parameters** + +This method has no parameters. + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.updaterService.getUpdateStatus(); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **checkForUpdates** +Checking for updates +- HTTP Method: PUT +- Endpoint: /updater/check + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| download | [Download](/src/main/java/io/plexsdk/models/README.md#download) | Optional | Indicate that you want to start download any updates found. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.updaterService.checkForUpdates(null); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **applyUpdates** +Apply Updates +- HTTP Method: PUT +- Endpoint: /updater/apply + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| tonight | [Tonight](/src/main/java/io/plexsdk/models/README.md#tonight) | Optional | Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install | +| skip | [Skip](/src/main/java/io/plexsdk/models/README.md#skip) | Optional | Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.updaterService.applyUpdates(null, null); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + +### **startUniversalTranscode** +Start Universal Transcode +- HTTP Method: GET +- Endpoint: /video/:/transcode/universal/start.mpd + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| hasMde | Float | Required | Whether the media item has MDE | +| path | String | Required | The path to the media item to transcode | +| mediaIndex | Float | Required | The index of the media item to transcode | +| partIndex | Float | Required | The index of the part to transcode | +| protocol | String | Required | The protocol to use for the transcode session | +| fastSeek | Float | Optional | Whether to use fast seek or not | +| directPlay | Float | Optional | Whether to use direct play or not | +| directStream | Float | Optional | Whether to use direct stream or not | +| subtitleSize | Float | Optional | The size of the subtitles | +| subtites | String | Optional | The subtitles | +| audioBoost | Float | Optional | The audio boost | +| location | String | Optional | The location of the transcode session | +| mediaBufferSize | Float | Optional | The size of the media buffer | +| session | String | Optional | The session ID | +| addDebugOverlay | Float | Optional | Whether to add a debug overlay or not | +| autoAdjustQuality | Float | Optional | Whether to auto adjust quality or not | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.videoService.startUniversalTranscode(4, "pathSampleValue", 3, 7, "protocolSampleValue", 6, 9, 5, 3, "subtitesSampleValue", 5, "locationSampleValue", 4, "sessionSampleValue", 5, 6); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + +### **getTimeline** +Get the timeline for a media item +- HTTP Method: GET +- Endpoint: /:/timeline + + +**Parameters** +| Name | Type| Required | Description | +| :-------- | :----------| :----------| :----------| +| ratingKey | Float | Required | The rating key of the media item | +| key | String | Required | The key of the media item to get the timeline for | +| state | [State](/src/main/java/io/plexsdk/models/README.md#state) | Required | The state of the media item | +| hasMde | Float | Required | Whether the media item has MDE | +| time | Float | Required | The time of the media item | +| duration | Float | Required | The duration of the media item | +| context | String | Required | The context of the media item | +| playQueueItemId | Float | Required | The play queue item ID of the media item | +| playBackTime | Float | Required | The playback time of the media item | +| row | Float | Required | The row of the media item | + +**Return Type** + +Returns a dict object. + +**Example Usage Code Snippet** +```Java +package 47.one0.examples; + +import 47.one0.exceptions.ApiException; +import 47.one0.PlexSDK; + +public class Main { + + public static void main(String[] args) { + PlexSDK client = new PlexSDK(System.getenv("PLEXSDK_API_KEY"), System.getenv("PLEXSDK_API_KEY_HEADER")); + try { + Object response = client.videoService.getTimeline(5, "keySampleValue", "stateSampleValue", 8, 4, 2, "contextSampleValue", 2, 3, 9); + System.out.println(response); + } catch(ApiException e) { + e.printStackTrace(); + } + } +} + +``` + + + diff --git a/src/main/java/47/one0/services/SearchService.java b/src/main/java/47/one0/services/SearchService.java new file mode 100644 index 00000000..9d97cf1b --- /dev/null +++ b/src/main/java/47/one0/services/SearchService.java @@ -0,0 +1,91 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class SearchService extends BaseService implements SearchClient { +public SearchService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Perform a search + * @param {String} query - The query term + * @param {Number} [sectionId] - This gives context to the search, and can result in re-ordering of search result hubs + * @param {Number} [limit] - The number of items to return per hub + */ + public ResponseWithHeaders performSearch(String query, Float sectionId, Float limit) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("hubs") +.addPathParameter("search") +.addRequiredQueryParameter("query", query) +.addOptionalQueryParameter("sectionId", sectionId) +.addOptionalQueryParameter("limit", limit) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Perform a voice search + * @param {String} query - The query term + * @param {Number} [sectionId] - This gives context to the search, and can result in re-ordering of search result hubs + * @param {Number} [limit] - The number of items to return per hub + */ + public ResponseWithHeaders performVoiceSearch(String query, Float sectionId, Float limit) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("hubs") +.addPathParameter("search") +.addPathParameter("voice") +.addRequiredQueryParameter("query", query) +.addOptionalQueryParameter("sectionId", sectionId) +.addOptionalQueryParameter("limit", limit) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Search Results + * @param {String} query - The search query string to use + */ + public ResponseWithHeaders<47.one0.models.GetSearchResultsResponse> getSearchResults(String query) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("search") +.addRequiredQueryParameter("query", query) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetSearchResultsResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetSearchResultsResponse>() {}), response.headers()); +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/SecurityService.java b/src/main/java/47/one0/services/SecurityService.java new file mode 100644 index 00000000..4e2ce6c4 --- /dev/null +++ b/src/main/java/47/one0/services/SecurityService.java @@ -0,0 +1,67 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class SecurityService extends BaseService implements SecurityClient { +public SecurityService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Get a Transient Token. + * @param {String} type - `delegation` - This is the only supported `type` parameter. + * @param {String} scope - `all` - This is the only supported `scope` parameter. + */ + public ResponseWithHeaders getTransientToken(String type, String scope) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("security") +.addPathParameter("token") +.addRequiredQueryParameter("type", type) +.addRequiredQueryParameter("scope", scope) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Source Connection Information + * @param {String} source - The source identifier with an included prefix. + */ + public ResponseWithHeaders getSourceConnectionInformation(String source) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("security") +.addPathParameter("resources") +.addRequiredQueryParameter("source", source) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/ServerService.java b/src/main/java/47/one0/services/ServerService.java new file mode 100644 index 00000000..49d0f5ee --- /dev/null +++ b/src/main/java/47/one0/services/ServerService.java @@ -0,0 +1,166 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class ServerService extends BaseService implements ServerClient { +public ServerService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Server Capabilities + */ + public ResponseWithHeaders<47.one0.models.GetServerCapabilitiesResponse> getServerCapabilities() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetServerCapabilitiesResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetServerCapabilitiesResponse>() {}), response.headers()); +} + /** + * @summary Get Server Preferences + */ + public ResponseWithHeaders getServerPreferences() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter(":") +.addPathParameter("prefs") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Available Clients + */ + public ResponseWithHeaders> getAvailableClients() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("clients") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference>() {}), response.headers()); +} + /** + * @summary Get Devices + */ + public ResponseWithHeaders<47.one0.models.GetDevicesResponse> getDevices() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("devices") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetDevicesResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetDevicesResponse>() {}), response.headers()); +} + /** + * @summary Get Server Identity + */ + public ResponseWithHeaders<47.one0.models.GetServerIdentityResponse> getServerIdentity() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("identity") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetServerIdentityResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetServerIdentityResponse>() {}), response.headers()); +} + /** + * @summary Get MyPlex Account + */ + public ResponseWithHeaders<47.one0.models.GetMyPlexAccountResponse> getMyPlexAccount() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("myplex") +.addPathParameter("account") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetMyPlexAccountResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetMyPlexAccountResponse>() {}), response.headers()); +} + /** + * @summary Get a Resized Photo + * @param {Number} width - The width for the resized photo + * @param {Number} height - The height for the resized photo + * @param {Integer} opacity - The opacity for the resized photo + * @param {Number} blur - The width for the resized photo + * @param {Number} minSize - images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against. + * @param {Number} upscale - allow images to be resized beyond native dimensions. + * @param {String} url - path to image within Plex + */ + public ResponseWithHeaders getResizedPhoto(Float width, Float height, Integer opacity, Float blur, Float minSize, Float upscale, String url) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("photo") +.addPathParameter(":") +.addPathParameter("transcode") +.addRequiredQueryParameter("width", width) +.addRequiredQueryParameter("height", height) +.addRequiredQueryParameter("opacity", opacity) +.addRequiredQueryParameter("blur", blur) +.addRequiredQueryParameter("minSize", minSize) +.addRequiredQueryParameter("upscale", upscale) +.addRequiredQueryParameter("url", url) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Server List + */ + public ResponseWithHeaders<47.one0.models.GetServerListResponse> getServerList() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("servers") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetServerListResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetServerListResponse>() {}), response.headers()); +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/SessionsService.java b/src/main/java/47/one0/services/SessionsService.java new file mode 100644 index 00000000..af8c0621 --- /dev/null +++ b/src/main/java/47/one0/services/SessionsService.java @@ -0,0 +1,102 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class SessionsService extends BaseService implements SessionsClient { +public SessionsService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Get Active Sessions + */ + public ResponseWithHeaders getSessions() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("status") +.addPathParameter("sessions") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Session History + */ + public ResponseWithHeaders getSessionHistory() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("status") +.addPathParameter("sessions") +.addPathParameter("history") +.addPathParameter("all") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get Transcode Sessions + */ + public ResponseWithHeaders<47.one0.models.GetTranscodeSessionsResponse> getTranscodeSessions() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("transcode") +.addPathParameter("sessions") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + return new ResponseWithHeaders<47.one0.models.GetTranscodeSessionsResponse>(ModelConverter.convert(response, new com.fasterxml.jackson.core.type.TypeReference<47.one0.models.GetTranscodeSessionsResponse>() {}), response.headers()); +} + /** + * @summary Stop a Transcode Session + * @param {String} sessionKey - the Key of the transcode session to stop + */ + public ResponseWithHeaders stopTranscodeSession(String sessionKey) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("transcode") +.addPathParameter("sessions") +.addPathParameter(String.valueOf(sessionKey)) +.build(); +Request request = new Request.Builder().url(url) +.delete() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/UpdaterService.java b/src/main/java/47/one0/services/UpdaterService.java new file mode 100644 index 00000000..1dfbd713 --- /dev/null +++ b/src/main/java/47/one0/services/UpdaterService.java @@ -0,0 +1,96 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class UpdaterService extends BaseService implements UpdaterClient { +public UpdaterService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Querying status of updates + */ + public ResponseWithHeaders getUpdateStatus() throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("updater") +.addPathParameter("status") +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Checking for updates + * @param {Download} [download] - Indicate that you want to start download any updates found. + */ + public ResponseWithHeaders checkForUpdates(String download) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("updater") +.addPathParameter("check") +.addOptionalQueryParameter("download", download) +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.put(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Apply Updates + * @param {Tonight} [tonight] - Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install + * @param {Skip} [skip] - Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. + */ + public ResponseWithHeaders applyUpdates(String tonight, String skip) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("updater") +.addPathParameter("apply") +.addOptionalQueryParameter("tonight", tonight) +.addOptionalQueryParameter("skip", skip) +.build(); +RequestBody requestBody = RequestBody.create( + Objects.requireNonNull(ModelConverter.modelToJson(new BaseModel() {})), + okhttp3.MediaType.parse("application/json; charset=utf-8") + ); +Request request = new Request.Builder().url(url) +.put(requestBody) +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/main/java/47/one0/services/VideoService.java b/src/main/java/47/one0/services/VideoService.java new file mode 100644 index 00000000..fbe7c5f8 --- /dev/null +++ b/src/main/java/47/one0/services/VideoService.java @@ -0,0 +1,116 @@ +package 47.one0.services; + +import java.util.Map; +import java.io.IOException; +import 47.one0.exceptions.ApiException; +import 47.one0.models.BaseModel; +import java.util.List; +import java.util.Objects; +import 47.one0.http.*; +import okhttp3.Headers; +import 47.one0.http.util.HttpUrl; +import 47.one0.http.util.HttpHeaders; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +public class VideoService extends BaseService implements VideoClient { +public VideoService(OkHttpClient httpClient, String serverUrl) { super(httpClient, serverUrl); } + /** + * @summary Start Universal Transcode + * @param {Number} hasMDE - Whether the media item has MDE + * @param {String} path - The path to the media item to transcode + * @param {Number} mediaIndex - The index of the media item to transcode + * @param {Number} partIndex - The index of the part to transcode + * @param {String} protocol - The protocol to use for the transcode session + * @param {Number} [fastSeek] - Whether to use fast seek or not + * @param {Number} [directPlay] - Whether to use direct play or not + * @param {Number} [directStream] - Whether to use direct stream or not + * @param {Number} [subtitleSize] - The size of the subtitles + * @param {String} [subtites] - The subtitles + * @param {Number} [audioBoost] - The audio boost + * @param {String} [location] - The location of the transcode session + * @param {Number} [mediaBufferSize] - The size of the media buffer + * @param {String} [session] - The session ID + * @param {Number} [addDebugOverlay] - Whether to add a debug overlay or not + * @param {Number} [autoAdjustQuality] - Whether to auto adjust quality or not + */ + public ResponseWithHeaders startUniversalTranscode(Float hasMDE, String path, Float mediaIndex, Float partIndex, String protocol, Float fastSeek, Float directPlay, Float directStream, Float subtitleSize, String subtites, Float audioBoost, String location, Float mediaBufferSize, String session, Float addDebugOverlay, Float autoAdjustQuality) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter("video") +.addPathParameter(":") +.addPathParameter("transcode") +.addPathParameter("universal") +.addPathParameter("start.mpd") +.addRequiredQueryParameter("hasMDE", hasMDE) +.addRequiredQueryParameter("path", path) +.addRequiredQueryParameter("mediaIndex", mediaIndex) +.addRequiredQueryParameter("partIndex", partIndex) +.addRequiredQueryParameter("protocol", protocol) +.addOptionalQueryParameter("fastSeek", fastSeek) +.addOptionalQueryParameter("directPlay", directPlay) +.addOptionalQueryParameter("directStream", directStream) +.addOptionalQueryParameter("subtitleSize", subtitleSize) +.addOptionalQueryParameter("subtites", subtites) +.addOptionalQueryParameter("audioBoost", audioBoost) +.addOptionalQueryParameter("location", location) +.addOptionalQueryParameter("mediaBufferSize", mediaBufferSize) +.addOptionalQueryParameter("session", session) +.addOptionalQueryParameter("addDebugOverlay", addDebugOverlay) +.addOptionalQueryParameter("autoAdjustQuality", autoAdjustQuality) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} + /** + * @summary Get the timeline for a media item + * @param {Number} ratingKey - The rating key of the media item + * @param {String} key - The key of the media item to get the timeline for + * @param {String} state - The state of the media item + * @param {Number} hasMDE - Whether the media item has MDE + * @param {Number} time - The time of the media item + * @param {Number} duration - The duration of the media item + * @param {String} context - The context of the media item + * @param {Number} playQueueItemID - The play queue item ID of the media item + * @param {Number} playBackTime - The playback time of the media item + * @param {Number} row - The row of the media item + */ + public ResponseWithHeaders getTimeline(Float ratingKey, String key, String state, Float hasMDE, Float time, Float duration, String context, Float playQueueItemID, Float playBackTime, Float row) throws ApiException +{ +String url = HttpUrl.builder(this.serverUrl) +.addPathParameter(":") +.addPathParameter("timeline") +.addRequiredQueryParameter("ratingKey", ratingKey) +.addRequiredQueryParameter("key", key) +.addRequiredQueryParameter("state", state) +.addRequiredQueryParameter("hasMDE", hasMDE) +.addRequiredQueryParameter("time", time) +.addRequiredQueryParameter("duration", duration) +.addRequiredQueryParameter("context", context) +.addRequiredQueryParameter("playQueueItemID", playQueueItemID) +.addRequiredQueryParameter("playBackTime", playBackTime) +.addRequiredQueryParameter("row", row) +.build(); +Request request = new Request.Builder().url(url) +.get() +.build(); +Response response = this.execute(request); + + try { + return new ResponseWithHeaders(response.body().string(), response.headers()); + } catch (IOException e) { + e.printStackTrace(); + } + return null; +} +} \ No newline at end of file diff --git a/src/test/java/47/one0/TestTest.java b/src/test/java/47/one0/TestTest.java new file mode 100644 index 00000000..ecaff14c --- /dev/null +++ b/src/test/java/47/one0/TestTest.java @@ -0,0 +1,12 @@ +package 47.one0; + +import org.junit.jupiter.api.*; +import static org.junit.Assert.assertTrue; + +public class TestTest { + @Test + @DisplayName("Tests that JUnit is working") + public void test() { + assertTrue(true); + } +} diff --git a/src/test/java/47/one0/helpers/TestModel.java b/src/test/java/47/one0/helpers/TestModel.java new file mode 100644 index 00000000..28f3f087 --- /dev/null +++ b/src/test/java/47/one0/helpers/TestModel.java @@ -0,0 +1,16 @@ +package 47.one0.helpers; + +import com.fasterxml.jackson.annotation.JsonProperty; +import 47.one0.models.BaseModel; + +public class TestModel extends BaseModel { + public String testString; + public int testInt; + public boolean testBoolean; + + public TestModel(@JsonProperty("testString") String testString, @JsonProperty("testInt") int testInt, @JsonProperty("testBoolean") boolean testBoolean) { + this.testString = testString; + this.testInt = testInt; + this.testBoolean = testBoolean; + } +} diff --git a/src/test/java/47/one0/http/ModelConverterTest.java b/src/test/java/47/one0/http/ModelConverterTest.java new file mode 100644 index 00000000..90a8547f --- /dev/null +++ b/src/test/java/47/one0/http/ModelConverterTest.java @@ -0,0 +1,39 @@ +package 47.one0.http; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import org.junit.jupiter.api.*; + +import 47.one0.helpers.TestModel; + +public class ModelConverterTest { + @Test + @DisplayName("Testing ModelConverter.modelToJson()") + public void testModelToJson() { + TestModel testModel = new TestModel("testString", 1, true); + String json = ModelConverter.modelToJson(testModel); + assertEquals(json, "{\"testString\":\"testString\",\"testInt\":1,\"testBoolean\":true}"); + } + + @Test + @DisplayName("Testing ModelConverter.jsonToModel()") + public void testJsonToModel() { + String json = "{\"testString\":\"testString\",\"testInt\":1,\"testBoolean\":true}"; + TestModel testModel = ModelConverter.convert(json, TestModel.class); + assertEquals(testModel.testString, "testString"); + assertEquals(testModel.testInt, 1); + assertTrue(testModel.testBoolean); + } + + @Test + @DisplayName("Testing ModelConverter.convert() and ModelConverter.modelToJson() are congruent") + public void congruency(){ + TestModel testModel = new TestModel("testString", 1, true); + String json = ModelConverter.modelToJson(testModel); + TestModel testModel2 = ModelConverter.convert(json, TestModel.class); + assertEquals(testModel.testString, testModel2.testString); + assertEquals(testModel.testInt, testModel2.testInt); + assertTrue(testModel.testBoolean == testModel2.testBoolean); + } + +} diff --git a/src/test/java/47/one0/models/ModelOneOfTests.java b/src/test/java/47/one0/models/ModelOneOfTests.java new file mode 100644 index 00000000..2eeb1505 --- /dev/null +++ b/src/test/java/47/one0/models/ModelOneOfTests.java @@ -0,0 +1,138 @@ +package 47.one0.models; + +import java.util.Set; + +import org.junit.Assert; +import org.junit.jupiter.api.Test; +import utils.ArrayUtils; + +public class ModelOneOfTests { + @Test + void testWithEmptyObject() { + BaseModel.Builder builder = + new BaseModel.Builder(BaseModel.Builder.ValidationType.ONE_OF) { + @Override + protected Set getNonNullInstanceFieldNames() { + return ArrayUtils.arrayToSet(new java.lang.String[] {}); + } + + @Override + protected Set> getRequiredFieldsGroups() { + return ArrayUtils.arraysToSets( + new java.lang.String[][] { + new java.lang.String[] {"foo", "bar", "baz"}, + }); + } + }; + + Assert.assertEquals("Object fails OneOf validation.", builder.validate()); + } + + @Test + void testWithEmptyObjectWithNoRequiredFields() { + BaseModel.Builder builder = + new BaseModel.Builder(BaseModel.Builder.ValidationType.ONE_OF) { + @Override + protected Set getNonNullInstanceFieldNames() { + return ArrayUtils.arrayToSet(new java.lang.String[] {}); + } + + @Override + protected Set> getRequiredFieldsGroups() { + return ArrayUtils.arraysToSets( + new java.lang.String[][] { + new java.lang.String[] {}, + }); + } + }; + + Assert.assertNull(builder.validate()); + } + + @Test + void testWithNoRequiredFields() { + BaseModel.Builder builder = + new BaseModel.Builder(BaseModel.Builder.ValidationType.ONE_OF) { + @Override + protected Set getNonNullInstanceFieldNames() { + return ArrayUtils.arrayToSet(new java.lang.String[] {"foo", "bar", "baz"}); + } + + @Override + protected Set> getRequiredFieldsGroups() { + return ArrayUtils.arraysToSets(new java.lang.String[][] {}); + } + }; + + Assert.assertNull(builder.validate()); + } + + @Test + void testWithRequiredFieldsMatching() { + BaseModel.Builder builder = + new BaseModel.Builder(BaseModel.Builder.ValidationType.ONE_OF) { + @Override + protected Set getNonNullInstanceFieldNames() { + return ArrayUtils.arrayToSet(new java.lang.String[] {"foo", "bar", "baz"}); + } + + @Override + protected Set> getRequiredFieldsGroups() { + return ArrayUtils.arraysToSets( + new java.lang.String[][] { + new String[] {"fizz", "buzz"}, + new String[] {"foo", "bar", "baz"}, + new String[] {"fish"} + }); + } + }; + + Assert.assertNull(builder.validate()); + } + + @Test + void testWithRequiredFieldsNotMatching() { + BaseModel.Builder builder = + new BaseModel.Builder(BaseModel.Builder.ValidationType.ONE_OF) { + @Override + protected Set getNonNullInstanceFieldNames() { + return ArrayUtils.arrayToSet(new java.lang.String[] {"alpha", "bravo", "charlie"}); + } + + @Override + protected Set> getRequiredFieldsGroups() { + return ArrayUtils.arraysToSets( + new java.lang.String[][] { + new String[] {"fizz", "buzz"}, + new String[] {"foo", "bar", "baz"}, + new String[] {"fish"} + }); + } + }; + + Assert.assertEquals("Object fails OneOf validation.", builder.validate()); + } + + @Test + void testWithRequiredFieldsPartiallyMatching() { + BaseModel.Builder builder = + new BaseModel.Builder(BaseModel.Builder.ValidationType.ONE_OF) { + @Override + protected Set getNonNullInstanceFieldNames() { + return ArrayUtils.arrayToSet(new java.lang.String[] {"foo", "bar", "charlie"}); + } + + @Override + protected Set> getRequiredFieldsGroups() { + return ArrayUtils.arraysToSets( + new java.lang.String[][] { + new String[] {"fizz", "buzz"}, + new String[] {"foo", "bar", "baz"}, + new String[] {"fish"} + }); + } + }; + + Assert.assertEquals("Object fails OneOf validation.", builder.validate()); + } +} diff --git a/src/test/java/47/one0/services/ActivitiesServiceTest.java b/src/test/java/47/one0/services/ActivitiesServiceTest.java new file mode 100644 index 00000000..8ba739eb --- /dev/null +++ b/src/test/java/47/one0/services/ActivitiesServiceTest.java @@ -0,0 +1,21 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class ActivitiesServiceTest { + + // @ActivitiesServiceTest + + // @DisplayName("Test that Activities is working") + + // public void test() {} + + // TODO: Write tests for getServerActivities + + // TODO: Write tests for cancelServerActivities + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/BaseServiceTest.java b/src/test/java/47/one0/services/BaseServiceTest.java new file mode 100644 index 00000000..ef322613 --- /dev/null +++ b/src/test/java/47/one0/services/BaseServiceTest.java @@ -0,0 +1,12 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +public class BaseServiceTest { + //@BaseServiceTest + //@DisplayName("BaseServiceTest that base service is working") + //public void test() {} + // TODO: Add base service test code here +} diff --git a/src/test/java/47/one0/services/ButlerServiceTest.java b/src/test/java/47/one0/services/ButlerServiceTest.java new file mode 100644 index 00000000..485d8783 --- /dev/null +++ b/src/test/java/47/one0/services/ButlerServiceTest.java @@ -0,0 +1,27 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class ButlerServiceTest { + + // @ButlerServiceTest + + // @DisplayName("Test that Butler is working") + + // public void test() {} + + // TODO: Write tests for getButlerTasks + + // TODO: Write tests for startAllTasks + + // TODO: Write tests for stopAllTasks + + // TODO: Write tests for startTask + + // TODO: Write tests for stopTask + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/HubsServiceTest.java b/src/test/java/47/one0/services/HubsServiceTest.java new file mode 100644 index 00000000..67a4c578 --- /dev/null +++ b/src/test/java/47/one0/services/HubsServiceTest.java @@ -0,0 +1,21 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class HubsServiceTest { + + // @HubsServiceTest + + // @DisplayName("Test that Hubs is working") + + // public void test() {} + + // TODO: Write tests for getGlobalHubs + + // TODO: Write tests for getLibraryHubs + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/LibraryServiceTest.java b/src/test/java/47/one0/services/LibraryServiceTest.java new file mode 100644 index 00000000..faf37730 --- /dev/null +++ b/src/test/java/47/one0/services/LibraryServiceTest.java @@ -0,0 +1,41 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class LibraryServiceTest { + + // @LibraryServiceTest + + // @DisplayName("Test that Library is working") + + // public void test() {} + + // TODO: Write tests for getFileHash + + // TODO: Write tests for getRecentlyAdded + + // TODO: Write tests for getLibraries + + // TODO: Write tests for getLibrary + + // TODO: Write tests for deleteLibrary + + // TODO: Write tests for getLibraryItems + + // TODO: Write tests for refreshLibrary + + // TODO: Write tests for getLatestLibraryItems + + // TODO: Write tests for getCommonLibraryItems + + // TODO: Write tests for getMetadata + + // TODO: Write tests for getMetadataChildren + + // TODO: Write tests for getOnDeck + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/LogServiceTest.java b/src/test/java/47/one0/services/LogServiceTest.java new file mode 100644 index 00000000..01d0c6b4 --- /dev/null +++ b/src/test/java/47/one0/services/LogServiceTest.java @@ -0,0 +1,23 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class LogServiceTest { + + // @LogServiceTest + + // @DisplayName("Test that Log is working") + + // public void test() {} + + // TODO: Write tests for logLine + + // TODO: Write tests for logMultiLine + + // TODO: Write tests for enablePaperTrail + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/MediaServiceTest.java b/src/test/java/47/one0/services/MediaServiceTest.java new file mode 100644 index 00000000..0be87bb5 --- /dev/null +++ b/src/test/java/47/one0/services/MediaServiceTest.java @@ -0,0 +1,23 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class MediaServiceTest { + + // @MediaServiceTest + + // @DisplayName("Test that Media is working") + + // public void test() {} + + // TODO: Write tests for markPlayed + + // TODO: Write tests for markUnplayed + + // TODO: Write tests for updatePlayProgress + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/PlaylistsServiceTest.java b/src/test/java/47/one0/services/PlaylistsServiceTest.java new file mode 100644 index 00000000..ae022895 --- /dev/null +++ b/src/test/java/47/one0/services/PlaylistsServiceTest.java @@ -0,0 +1,35 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class PlaylistsServiceTest { + + // @PlaylistsServiceTest + + // @DisplayName("Test that Playlists is working") + + // public void test() {} + + // TODO: Write tests for createPlaylist + + // TODO: Write tests for getPlaylists + + // TODO: Write tests for getPlaylist + + // TODO: Write tests for updatePlaylist + + // TODO: Write tests for deletePlaylist + + // TODO: Write tests for getPlaylistContents + + // TODO: Write tests for addPlaylistContents + + // TODO: Write tests for clearPlaylistContents + + // TODO: Write tests for uploadPlaylist + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/SearchServiceTest.java b/src/test/java/47/one0/services/SearchServiceTest.java new file mode 100644 index 00000000..90c43eb0 --- /dev/null +++ b/src/test/java/47/one0/services/SearchServiceTest.java @@ -0,0 +1,23 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class SearchServiceTest { + + // @SearchServiceTest + + // @DisplayName("Test that Search is working") + + // public void test() {} + + // TODO: Write tests for performSearch + + // TODO: Write tests for performVoiceSearch + + // TODO: Write tests for getSearchResults + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/SecurityServiceTest.java b/src/test/java/47/one0/services/SecurityServiceTest.java new file mode 100644 index 00000000..e9e6ecd2 --- /dev/null +++ b/src/test/java/47/one0/services/SecurityServiceTest.java @@ -0,0 +1,21 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class SecurityServiceTest { + + // @SecurityServiceTest + + // @DisplayName("Test that Security is working") + + // public void test() {} + + // TODO: Write tests for getTransientToken + + // TODO: Write tests for getSourceConnectionInformation + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/ServerServiceTest.java b/src/test/java/47/one0/services/ServerServiceTest.java new file mode 100644 index 00000000..f1e5d4ab --- /dev/null +++ b/src/test/java/47/one0/services/ServerServiceTest.java @@ -0,0 +1,33 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class ServerServiceTest { + + // @ServerServiceTest + + // @DisplayName("Test that Server is working") + + // public void test() {} + + // TODO: Write tests for getServerCapabilities + + // TODO: Write tests for getServerPreferences + + // TODO: Write tests for getAvailableClients + + // TODO: Write tests for getDevices + + // TODO: Write tests for getServerIdentity + + // TODO: Write tests for getMyPlexAccount + + // TODO: Write tests for getResizedPhoto + + // TODO: Write tests for getServerList + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/SessionsServiceTest.java b/src/test/java/47/one0/services/SessionsServiceTest.java new file mode 100644 index 00000000..7fb81368 --- /dev/null +++ b/src/test/java/47/one0/services/SessionsServiceTest.java @@ -0,0 +1,25 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class SessionsServiceTest { + + // @SessionsServiceTest + + // @DisplayName("Test that Sessions is working") + + // public void test() {} + + // TODO: Write tests for getSessions + + // TODO: Write tests for getSessionHistory + + // TODO: Write tests for getTranscodeSessions + + // TODO: Write tests for stopTranscodeSession + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/UpdaterServiceTest.java b/src/test/java/47/one0/services/UpdaterServiceTest.java new file mode 100644 index 00000000..ce52ac70 --- /dev/null +++ b/src/test/java/47/one0/services/UpdaterServiceTest.java @@ -0,0 +1,23 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class UpdaterServiceTest { + + // @UpdaterServiceTest + + // @DisplayName("Test that Updater is working") + + // public void test() {} + + // TODO: Write tests for getUpdateStatus + + // TODO: Write tests for checkForUpdates + + // TODO: Write tests for applyUpdates + +} \ No newline at end of file diff --git a/src/test/java/47/one0/services/VideoServiceTest.java b/src/test/java/47/one0/services/VideoServiceTest.java new file mode 100644 index 00000000..0aade824 --- /dev/null +++ b/src/test/java/47/one0/services/VideoServiceTest.java @@ -0,0 +1,21 @@ +package 47.one0.services; + +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.*; + +import 47.one0.models.*; + +class VideoServiceTest { + + // @VideoServiceTest + + // @DisplayName("Test that Video is working") + + // public void test() {} + + // TODO: Write tests for startUniversalTranscode + + // TODO: Write tests for getTimeline + +} \ No newline at end of file