diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 0000000..bcf7b5d --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,38 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Tests + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + fail-fast: false + max-parallel: 2 + matrix: + jdk: ["8", "11", "17", "21"] + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.jdk }} + distribution: 'temurin' + cache: 'maven' + - name: MVN Install + run: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -Dgpg.skip -B -V + - name: Build + run: mvn clean compile -U + - name: Unit Tests + run: mvn test -Punit-tests + - name: Integration Tests + run: mvn test -Pintegration-tests diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5e3e676..0000000 --- a/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: java - -jdk: - - openjdk8 - - openjdk11 - -script: mvn clean compile -U && mvn test -Punit-tests && mvn test -Pintegration-tests diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d53ecaf --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "java.compile.nullAnalysis.mode": "automatic", + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/README.md b/README.md index 90fde0b..f09c340 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,18 @@ ## cloudconvert-java -This is the official Java SDK v2 for the [CloudConvert](https://cloudconvert.com/api/v2) _API v2_. -[![Build Status](https://travis-ci.org/cloudconvert/cloudconvert-java.svg?branch=master)](https://travis-ci.org/cloudconvert/cloudconvert-java) + +[![Tests](https://github.com/cloudconvert/cloudconvert-java/actions/workflows/run-tests.yml/badge.svg)](https://github.com/cloudconvert/cloudconvert-java/actions/workflows/run-tests.yml) +![Maven Central](https://img.shields.io/maven-central/v/com.cloudconvert/cloudconvert-java) + +This is the official Java SDK v2 for the [CloudConvert](https://cloudconvert.com/api/v2) API. ## Installation +Add the following dependency to your pom.xml: ``` -$ mvn clean install -U + + com.cloudconvert + cloudconvert-java + 1.2.3 + ``` ## Creating API Client @@ -14,7 +22,7 @@ By default, API Key, Sandbox and Webhook Signing Secret are being read from `app ```properties CLOUDCONVERT_API_KEY= CLOUDCONVERT_SANDBOX= -CLOUDCONVERT_WEBHOOK_SIGNING_SECRET= +CLOUDCONVERT_WEBHOOK_SIGNING_SECRET= ``` It is also possible to provide configuration above using environment variables, custom properties file, system properties and string variables. For all options, `CLOUDCONVERT_API_KEY`, `CLOUDCONVERT_SANDBOX` and `CLOUDCONVERT_WEBHOOK_SIGNING_SECRET` variable names should be used. @@ -31,7 +39,7 @@ new CloudConvertClient(new EnvironmentVariableSettingsProvider()); new CloudConvertClient(new PropertyFileSettingsProvider("custom.properties")); // Using configuration from string variables -new CloudConvertClient(new StringSettingsProvider("api-url", "webhook-signing-secret")); +new CloudConvertClient(new StringSettingsProvider("api-key", "webhook-signing-secret", false)); // Using configuration from system properties new CloudConvertClient(new SystemPropertySettingsProvider()); @@ -49,7 +57,7 @@ new AsyncCloudConvertClient(new EnvironmentVariableSettingsProvider()); new AsyncCloudConvertClient(new PropertyFileSettingsProvider("custom.properties")); // Using configuration from string variables -new AsyncCloudConvertClient(new StringSettingsProvider("api-url", "webhook-signing-secret")); +new AsyncCloudConvertClient(new StringSettingsProvider("api-key", "webhook-signing-secret", false)); // Using configuration from system properties new AsyncCloudConvertClient(new SystemPropertySettingsProvider()); @@ -66,7 +74,10 @@ final CloudConvertClient cloudConvertClient = new CloudConvertClient(); final JobResponse createJobResponse = cloudConvertClient.jobs().create( ImmutableMap.of( "import-my-file", new UrlImportRequest().setUrl("import-url"), - "convert-my-file", new ConvertFilesTaskRequest().setInput("import-my-file").set("width", 100).set("height", 100), + "convert-my-file", new ConvertFilesTaskRequest() + .setInput("import-my-file") + .set("width", 100) + .set("height", 100), "export-my-file", new UrlExportRequest().setInput("convert-my-file") ) ).getBody(); @@ -90,7 +101,10 @@ final AsyncCloudConvertClient asyncCloudConvertClient = new AsyncCloudConvertCli final JobResponse createJobResponse = asyncCloudConvertClient.jobs().create( ImmutableMap.of( "import-my-file", new UrlImportRequest().setUrl("import-url"), - "convert-my-file", new ConvertFilesTaskRequest().setInput("import-my-file").set("width", 100).set("height", 100), + "convert-my-file", new ConvertFilesTaskRequest() + .setInput("import-my-file") + .set("width", 100) + .set("height", 100), "export-my-file", new UrlExportRequest().setInput("convert-my-file") ) ).get().getBody(); @@ -110,44 +124,36 @@ CloudConvert can generate public URLs using `export/url` tasks. You can use thes ###### Default (synchronous) client ```java -// Create a client -final CloudConvertClient cloudConvertClient = new CloudConvertClient(); - -// Create an export/url task -final TaskResponse exportUrlTaskResponse = cloudConvertClient.exportUsing().url(new UrlExportRequest()).getBody(); - -// Get an export/url task id -final String exportUrlTaskId = exportUrlTaskResponse.getId(); - // Wait for an export/url task to be finished final TaskResponse waitUrlExportTaskResponse = cloudConvertClient.tasks().wait(exportUrlTaskId).getBody(); -// Get a url of export/url task +// Get url and filename of export/url task final String exportUrl = waitUrlExportTaskResponse.getResult().getFiles().get(0).get("url"); +final String filename = waitUrlExportTaskResponse.getResult().getFiles().get(0).get("filename"); // Get file as input stream using url of export/url task final InputStream inputStream = cloudConvertClient.files().download(exportUrl).getBody(); + +// Save to local file +OutputStream outputStream = new FileOutputStream(new File(filename)); +IOUtils.copy(inputStream, outputStream); ``` ###### Asynchronous client ```java -// Create a client -final AsyncCloudConvertClient asyncCloudConvertClient = new AsyncCloudConvertClient(); - -// Create an export/url task -final TaskResponse exportUrlTaskResponse = asyncCloudConvertClient.exportUsing().url(new UrlExportRequest()).get().getBody(); - -// Get an export/url task id -final String exportUrlTaskId = exportUrlTaskResponse.getId(); - // Wait for an export/url task to be finished final TaskResponse waitUrlExportTaskResponse = asyncCloudConvertClient.tasks().wait(exportUrlTaskId).get().getBody(); // Get a url of export/url task final String exportUrl = waitUrlExportTaskResponse.getResult().getFiles().get(0).get("url"); +final String filename = waitUrlExportTaskResponse.getResult().getFiles().get(0).get("filename"); // Get file as input stream using url of export/url task final InputStream inputStream = asyncCloudConvertClient.files().download(exportUrl).get().getBody(); + +// Save to local file +OutputStream outputStream = new FileOutputStream(new File(filename)); +IOUtils.copy(inputStream, outputStream); ``` ## Uploading Files @@ -163,7 +169,7 @@ final CloudConvertClient cloudConvertClient = new CloudConvertClient(); final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("file.jpg"); // Upload file using import/upload task -final TaskResponse uploadImportTaskResponse = cloudConvertClient.importUsing().upload(new UploadImportRequest(), inputStream).getBody(); +final TaskResponse uploadImportTaskResponse = cloudConvertClient.importUsing().upload(new UploadImportRequest(), inputStream, "file.jpg").getBody(); // Wait for import/upload task to be finished final TaskResponse waitUploadImportTaskResponse = cloudConvertClient.tasks().wait(uploadImportTaskResponse.getId()).getBody(); @@ -178,16 +184,15 @@ final AsyncCloudConvertClient asyncCloudConvertClient = new CloudConvertClient() final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("file.jpg"); // Upload file using import/upload task -final TaskResponse uploadImportTaskResponse = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), inputStream).get().getBody(); +final TaskResponse uploadImportTaskResponse = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), inputStream, "file.jpg").get().getBody(); // Wait for import/upload task to be finished final TaskResponse waitUploadImportTaskResponse = asyncCloudConvertClient.tasks().wait(uploadImportTaskResponse.getId()).get().getBody(); ``` -## Signing Webhook +## Verify Webhook Signatures The node SDK allows to verify webhook requests received from CloudConvert. -###### Default (synchronous) client ```java // Create a client final CloudConvertClient cloudConvertClient = new CloudConvertClient(); @@ -198,29 +203,30 @@ final String payload = "payload"; // The value of the "CloudConvert-Signature" header. final String signature = "signature"; -// You can find it in your webhook settings. -final String secret = "secret"; - // Returns true if signature is valid, and false if signature is invalid final boolean isValid = cloudConvertClient.webhooks().verify(payload, signature); ``` -###### Asynchronous client +## Signed URLs + +Signed URLs allow converting files on demand only using URL query parameters. The Java SDK allows to generate such URLs. Therefore, you need to obtain a signed URL base and a signing secret on the [CloudConvert Dashboard](https://cloudconvert.com/dashboard/api/v2/signed-urls). + ```java -// Create a client -final AsyncCloudConvertClient asyncCloudConvertClient = new AsyncCloudConvertClient(); -// The JSON payload from the raw request body. -final String payload = "payload"; +final String base = "https://s.cloudconvert.com/..."; // You can find it in your signed URL settings. +final String signingSecret = "..."; // You can find it in your signed URL settings. +final String cacheKey = "mykey"; // Allows caching of the result file for 24h -// The value of the "CloudConvert-Signature" header. -final String signature = "signature"; +final Map tasks = ImmutableMap.of( + "import-my-file", new UrlImportRequest().setUrl("import-url"), + "convert-my-file", new ConvertFilesTaskRequest() + .setInput("import-my-file") + .setOutputFormat("pdf") + "export-my-file", new UrlExportRequest().setInput("convert-my-file") + ); -// You can find it in your webhook settings. -final String secret = "secret"; -// Returns true if signature is valid, and false if signature is invalid -final boolean isValid = asyncCloudConvertClient.webhooks().verify(payload, signature); +final String url = cloudConvertClient.signedUrls().sign(base, signingSecret, tasks, cacheKey); ``` ## Unit Tests @@ -233,6 +239,13 @@ $ mvn clean install -U -Punit-tests $ mvn clean install -U -Pintegration-tests ``` +By default, this runs the integration tests against the Sandbox API with an official CloudConvert account. If you would like to use your own account, you can set your API key in the `application.properties` file. In this case you need to whitelist the following MD5 hashes for Sandbox API (using the CloudConvert dashboard). + + 07db6477193bf8313e8082a1e1b5eaf6 image-test-file-1.jpg + 7ef166ecc65949f6f2e7eb94a3dac0d4 image-test-file-2.jpg + ccbb000ef5bd9dad0fab600d2fff02fb odt-test-file-1.odt + 3a3b4d07338b51db19056a73a89a186b odt-test-file-2.odt + ## Resources * [API v2 Documentation](https://cloudconvert.com/api/v2) * [CloudConvert Blog](https://cloudconvert.com/blog) diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 9860e6f..0000000 --- a/TODO.md +++ /dev/null @@ -1,29 +0,0 @@ -We need a Java API SDK for an existing REST API. - -The API docs are available at: https://cloudconvert.com/api/v2 - -There are already PHP, node.js and Python SDKs available: -https://github.com/cloudconvert/cloudconvert-php -https://github.com/cloudconvert/cloudconvert-node -https://github.com/cloudconvert/cloudconvert-python - -So the task is basically just "translating" one of these SDKs into Java. - -The SDK should have the following features: -- [DONE] Create jobs, get jobs, delete jobs, wait for job completion -- [DONE] Create tasks, get tasks, delete tasks, wait for task completion -- [DONE] Method to upload input files -- [DONE] Method to download output files -- [DONE] Method to validate webhook signatures -- [DONE] Unit tests -- [DONE] Integration tests -- [DONE] Working Travis configuration for both unit and integration tests -- [DONE] README file (similar to the existing SDKs) -- [DONE] Prepare Maven package (pom.xml) - - -1. [DONE] The SDK should work with Java 8+ -2. [OK] There is no strict deadline, but I would be thankful if you could get it done in ~2 weeks. -3. [OK] Yes, there is a sandbox API available with unlimited requests. -4. [OK] Socket.io is not required for the Java SDK -5. [DONE] Both sync and async support diff --git a/pom.xml b/pom.xml index 5db81d4..82f5b87 100644 --- a/pom.xml +++ b/pom.xml @@ -7,36 +7,66 @@ com.cloudconvert cloudconvert-java - 1.0.0-SNAPSHOT + 1.2.3 cloudconvert-java + CloudConvert is an online file converter API - more than 200 different audio, video, document, ebook, archive, image, spreadsheet and presentation formats supported. https://cloudconvert.com/api/v2 + + + The MIT License + https://opensource.org/licenses/MIT + repo + + + + + + Josias Montag + montag@lunaweb.de + Lunaweb GmbH + https://www.lunaweb.de + + + + + scm:git:git://github.com/cloudconvert/cloudconvert-java.git + scm:git:git@github.com:cloudconvert/cloudconvert-java.git + https://github.com/cloudconvert/cloudconvert-java + HEAD + + + UTF-8 1.8 1.8 - 4.5.12 + 4.5.13 4.1.4 4.5.12 - 1.24 + 1.28.3 - 2.10.3 + 2.22.0 - 2.0.0-alpha1 + 1.7.30 19.0.0 - 28.2-jre + 32.0.0-jre - 1.18.12 + 1.18.30 - 4.13 - 3.3.3 - 3.15.0 + 4.13.1 + 4.11.0 + 1.14.17 + 3.27.7 1.5.0 - 1.19.0 3.0.0-M3 + 0.7.0 + 3.1.0 + 3.1.1 + 1.6 @@ -108,6 +138,12 @@ ${mockito.version} test + + net.bytebuddy + byte-buddy + ${byte-buddy.version} + compile + org.assertj assertj-core @@ -120,12 +156,6 @@ ${throwing-function.version} test - - com.github.stefanbirkner - system-rules - ${system-rules.version} - test - @@ -163,6 +193,67 @@ ${test.groups} + + + org.sonatype.central + central-publishing-maven-plugin + ${central-publishing-maven-plugin.version} + true + + central + true + + + + + + org.apache.maven.plugins + maven-source-plugin + ${maven-source-plugin.version} + + + attach-sources + + jar-no-fork + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + ${java.home}/bin/javadoc + + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + ${maven-gpg-plugin.version} + + + sign-artifacts + verify + + sign + + + + + + + diff --git a/src/main/java/com/cloudconvert/client/AbstractCloudConvertClient.java b/src/main/java/com/cloudconvert/client/AbstractCloudConvertClient.java index cc5b7d6..85b7192 100644 --- a/src/main/java/com/cloudconvert/client/AbstractCloudConvertClient.java +++ b/src/main/java/com/cloudconvert/client/AbstractCloudConvertClient.java @@ -7,13 +7,7 @@ import com.cloudconvert.dto.response.UserResponse; import com.cloudconvert.dto.response.WebhookResponse; import com.cloudconvert.dto.result.AbstractResult; -import com.cloudconvert.resource.AbstractExportFilesResource; -import com.cloudconvert.resource.AbstractFilesResource; -import com.cloudconvert.resource.AbstractImportFilesResource; -import com.cloudconvert.resource.AbstractJobsResource; -import com.cloudconvert.resource.AbstractTasksResource; -import com.cloudconvert.resource.AbstractUsersResource; -import com.cloudconvert.resource.AbstractWebhooksResource; +import com.cloudconvert.resource.*; import java.io.Closeable; import java.io.IOException; @@ -33,13 +27,14 @@ public class AbstractCloudConvertClient< private final AbstractUsersResource abstractUsersResource; private final AbstractWebhooksResource abstractWebhooksResource; private final AbstractFilesResource abstractFilesResource; + private final AbstractSignedUrlResource abstractSignedUrlResource; public AbstractCloudConvertClient( - final AbstractTasksResource abstractTasksResource, final AbstractJobsResource abstractJobsResource, - final AbstractImportFilesResource abstractImportFilesResource, final AbstractExportFilesResource abstractExportFilesResource, - final AbstractUsersResource abstractUsersResource, final AbstractWebhooksResource abstractWebhooksResource, - final AbstractFilesResource abstractFilesResource - ) { + final AbstractTasksResource abstractTasksResource, final AbstractJobsResource abstractJobsResource, + final AbstractImportFilesResource abstractImportFilesResource, final AbstractExportFilesResource abstractExportFilesResource, + final AbstractUsersResource abstractUsersResource, final AbstractWebhooksResource abstractWebhooksResource, + final AbstractFilesResource abstractFilesResource, final AbstractSignedUrlResource abstractSignedUrlResource + ) { this.abstractTasksResource = abstractTasksResource; this.abstractJobsResource = abstractJobsResource; this.abstractImportFilesResource = abstractImportFilesResource; @@ -47,6 +42,7 @@ public AbstractCloudConvertClient( this.abstractUsersResource = abstractUsersResource; this.abstractWebhooksResource = abstractWebhooksResource; this.abstractFilesResource = abstractFilesResource; + this.abstractSignedUrlResource = abstractSignedUrlResource; } public AbstractTasksResource tasks() { @@ -77,6 +73,8 @@ public AbstractFilesResource files() { return abstractFilesResource; } + public AbstractSignedUrlResource signedUrls() { return abstractSignedUrlResource; } + @Override public void close() throws IOException { abstractTasksResource.close(); @@ -86,5 +84,6 @@ public void close() throws IOException { abstractUsersResource.close(); abstractWebhooksResource.close(); abstractFilesResource.close(); + abstractSignedUrlResource.close(); } } diff --git a/src/main/java/com/cloudconvert/client/AsyncCloudConvertClient.java b/src/main/java/com/cloudconvert/client/AsyncCloudConvertClient.java index 0b26d8b..40f6730 100644 --- a/src/main/java/com/cloudconvert/client/AsyncCloudConvertClient.java +++ b/src/main/java/com/cloudconvert/client/AsyncCloudConvertClient.java @@ -13,19 +13,7 @@ import com.cloudconvert.dto.result.AsyncResult; import com.cloudconvert.executor.AsyncRequestExecutor; import com.cloudconvert.extractor.ResultExtractor; -import com.cloudconvert.resource.async.AsyncCaptureWebsitesResource; -import com.cloudconvert.resource.async.AsyncConvertFilesResource; -import com.cloudconvert.resource.async.AsyncCreateArchivesResource; -import com.cloudconvert.resource.async.AsyncExecuteCommandsResource; -import com.cloudconvert.resource.async.AsyncExportFilesResource; -import com.cloudconvert.resource.async.AsyncFilesResource; -import com.cloudconvert.resource.async.AsyncImportFilesResource; -import com.cloudconvert.resource.async.AsyncJobsResource; -import com.cloudconvert.resource.async.AsyncMergeFilesResource; -import com.cloudconvert.resource.async.AsyncOptimizeFilesResource; -import com.cloudconvert.resource.async.AsyncTasksResource; -import com.cloudconvert.resource.async.AsyncUsersResource; -import com.cloudconvert.resource.async.AsyncWebhookResource; +import com.cloudconvert.resource.async.*; import java.io.IOException; import java.io.InputStream; @@ -61,7 +49,11 @@ public AsyncCloudConvertClient( new AsyncCaptureWebsitesResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), new AsyncMergeFilesResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), new AsyncCreateArchivesResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), - new AsyncExecuteCommandsResource(settingsProvider, objectMapperProvider, asyncRequestExecutor) + new AsyncExecuteCommandsResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), + new AsyncCreateThumbnailsResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), + new AsyncGetMetadataResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), + new AsyncWriteMetadataResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), + new AsyncAddWatermarkResource(settingsProvider, objectMapperProvider, asyncRequestExecutor) ), new AsyncJobsResource(settingsProvider, objectMapperProvider, asyncRequestExecutor) ); @@ -76,7 +68,8 @@ public AsyncCloudConvertClient( new AsyncExportFilesResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), new AsyncUsersResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), new AsyncWebhookResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), - new AsyncFilesResource(settingsProvider, objectMapperProvider, asyncRequestExecutor) + new AsyncFilesResource(settingsProvider, objectMapperProvider, asyncRequestExecutor), + new AsyncSignedUrlResource(settingsProvider, objectMapperProvider, asyncRequestExecutor) ); } } diff --git a/src/main/java/com/cloudconvert/client/CloudConvertClient.java b/src/main/java/com/cloudconvert/client/CloudConvertClient.java index 0bd24bc..0b40d6b 100644 --- a/src/main/java/com/cloudconvert/client/CloudConvertClient.java +++ b/src/main/java/com/cloudconvert/client/CloudConvertClient.java @@ -13,19 +13,7 @@ import com.cloudconvert.dto.result.Result; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.extractor.ResultExtractor; -import com.cloudconvert.resource.sync.CaptureWebsitesResource; -import com.cloudconvert.resource.sync.ConvertFilesResource; -import com.cloudconvert.resource.sync.CreateArchivesResource; -import com.cloudconvert.resource.sync.ExecuteCommandsResource; -import com.cloudconvert.resource.sync.ExportFilesResource; -import com.cloudconvert.resource.sync.FilesResource; -import com.cloudconvert.resource.sync.ImportFilesResource; -import com.cloudconvert.resource.sync.JobsResource; -import com.cloudconvert.resource.sync.MergeFilesResource; -import com.cloudconvert.resource.sync.OptimizeFilesResource; -import com.cloudconvert.resource.sync.TasksResource; -import com.cloudconvert.resource.sync.UsersResource; -import com.cloudconvert.resource.sync.WebhookResource; +import com.cloudconvert.resource.sync.*; import java.io.IOException; import java.io.InputStream; @@ -62,7 +50,11 @@ public CloudConvertClient( new CaptureWebsitesResource(settingsProvider, objectMapperProvider, requestExecutor), new MergeFilesResource(settingsProvider, objectMapperProvider, requestExecutor), new CreateArchivesResource(settingsProvider, objectMapperProvider, requestExecutor), - new ExecuteCommandsResource(settingsProvider, objectMapperProvider, requestExecutor) + new ExecuteCommandsResource(settingsProvider, objectMapperProvider, requestExecutor), + new CreateThumbnailsResource(settingsProvider, objectMapperProvider, requestExecutor), + new GetMetadataResource(settingsProvider, objectMapperProvider, requestExecutor), + new WriteMetadataResource(settingsProvider, objectMapperProvider, requestExecutor), + new AddWatermarkResource(settingsProvider, objectMapperProvider, requestExecutor) ), new JobsResource(settingsProvider, objectMapperProvider, requestExecutor) ); @@ -78,7 +70,8 @@ public CloudConvertClient( new ExportFilesResource(settingsProvider, objectMapperProvider, requestExecutor), new UsersResource(settingsProvider, objectMapperProvider, requestExecutor), new WebhookResource(settingsProvider, objectMapperProvider, requestExecutor), - new FilesResource(settingsProvider, objectMapperProvider, requestExecutor) + new FilesResource(settingsProvider, objectMapperProvider, requestExecutor), + new SignedUrlResource(settingsProvider, objectMapperProvider, requestExecutor) ); } } diff --git a/src/main/java/com/cloudconvert/client/mapper/ObjectMapperProvider.java b/src/main/java/com/cloudconvert/client/mapper/ObjectMapperProvider.java index 1a73312..4996ad5 100644 --- a/src/main/java/com/cloudconvert/client/mapper/ObjectMapperProvider.java +++ b/src/main/java/com/cloudconvert/client/mapper/ObjectMapperProvider.java @@ -3,14 +3,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; public class ObjectMapperProvider { public ObjectMapper provide() { return new ObjectMapper() .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE) - .setSerializationInclusion(JsonInclude.Include.NON_NULL); + .setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) + .setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL); } } diff --git a/src/main/java/com/cloudconvert/client/setttings/AbstractSettingsProvider.java b/src/main/java/com/cloudconvert/client/setttings/AbstractSettingsProvider.java index b9ed300..c00c33f 100644 --- a/src/main/java/com/cloudconvert/client/setttings/AbstractSettingsProvider.java +++ b/src/main/java/com/cloudconvert/client/setttings/AbstractSettingsProvider.java @@ -16,9 +16,13 @@ public abstract class AbstractSettingsProvider implements SettingsProvider { public static final String API_URL_SANDBOX = "https://api.sandbox.cloudconvert.com/v2"; public static final String API_URL_LIVE = "https://api.cloudconvert.com/v2"; + public static final String API_SYNC_URL_SANDBOX = "https://sync.api.sandbox.cloudconvert.com/v2"; + public static final String API_SYNC_URL_LIVE = "https://sync.api.cloudconvert.com/v2"; + private String apiKey; private String webhookSigningSecret; private String apiUrl; + private String syncApiUrl; protected AbstractSettingsProvider( final String apiKey, final String webhookSigningSecret, final String useSandbox @@ -39,10 +43,11 @@ protected AbstractSettingsProvider( private void init(final String apiKey, final String webhookSigningSecret, final String useSandbox) { this.apiKey = Optional.ofNullable(apiKey) - .orElseThrow(() -> new IllegalArgumentException("Could not resolve " + USE_SANDBOX + ", make sure it is set correctly ...")); + .orElseThrow(() -> new IllegalArgumentException("Could not resolve " + API_KEY + ", make sure it is set correctly ...")); this.webhookSigningSecret = Optional.ofNullable(webhookSigningSecret) .orElseThrow(() -> new IllegalArgumentException("Could not resolve " + WEBHOOK_SIGNING_SECRET + ", make sure it is set correctly ...")); this.apiUrl = Boolean.parseBoolean(useSandbox) ? API_URL_SANDBOX : API_URL_LIVE; + this.syncApiUrl = Boolean.parseBoolean(useSandbox) ? API_SYNC_URL_SANDBOX : API_SYNC_URL_LIVE; } @Override @@ -59,4 +64,9 @@ public String getWebhookSigningSecret() { public String getApiUrl() { return apiUrl; } + + @Override + public String getSyncApiUrl() { + return syncApiUrl; + } } diff --git a/src/main/java/com/cloudconvert/client/setttings/EnvironmentVariableSettingsProvider.java b/src/main/java/com/cloudconvert/client/setttings/EnvironmentVariableSettingsProvider.java index 07d1983..1de65c2 100644 --- a/src/main/java/com/cloudconvert/client/setttings/EnvironmentVariableSettingsProvider.java +++ b/src/main/java/com/cloudconvert/client/setttings/EnvironmentVariableSettingsProvider.java @@ -2,7 +2,14 @@ public class EnvironmentVariableSettingsProvider extends AbstractSettingsProvider { + private final EnvironmentVariables environmentVariables; + public EnvironmentVariableSettingsProvider() { - super(System.getenv(API_KEY), System.getenv(WEBHOOK_SIGNING_SECRET), System.getenv(USE_SANDBOX)); + this(new SystemEnvironmentVariables()); + } + + public EnvironmentVariableSettingsProvider(EnvironmentVariables environmentVariables) { + super(environmentVariables.getenv(API_KEY), environmentVariables.getenv(WEBHOOK_SIGNING_SECRET), environmentVariables.getenv(USE_SANDBOX)); + this.environmentVariables = environmentVariables; } } diff --git a/src/main/java/com/cloudconvert/client/setttings/EnvironmentVariables.java b/src/main/java/com/cloudconvert/client/setttings/EnvironmentVariables.java new file mode 100644 index 0000000..826f6f5 --- /dev/null +++ b/src/main/java/com/cloudconvert/client/setttings/EnvironmentVariables.java @@ -0,0 +1,5 @@ +package com.cloudconvert.client.setttings; + +public interface EnvironmentVariables { + String getenv(String name); +} \ No newline at end of file diff --git a/src/main/java/com/cloudconvert/client/setttings/SettingsProvider.java b/src/main/java/com/cloudconvert/client/setttings/SettingsProvider.java index a2faa2f..3001796 100644 --- a/src/main/java/com/cloudconvert/client/setttings/SettingsProvider.java +++ b/src/main/java/com/cloudconvert/client/setttings/SettingsProvider.java @@ -9,5 +9,7 @@ public interface SettingsProvider { String getApiUrl(); + String getSyncApiUrl(); + String getWebhookSigningSecret(); } diff --git a/src/main/java/com/cloudconvert/client/setttings/SystemEnvironmentVariables.java b/src/main/java/com/cloudconvert/client/setttings/SystemEnvironmentVariables.java new file mode 100644 index 0000000..22386fe --- /dev/null +++ b/src/main/java/com/cloudconvert/client/setttings/SystemEnvironmentVariables.java @@ -0,0 +1,8 @@ +package com.cloudconvert.client.setttings; + +public class SystemEnvironmentVariables implements EnvironmentVariables { + @Override + public String getenv(String name) { + return System.getenv(name); + } +} \ No newline at end of file diff --git a/src/main/java/com/cloudconvert/dto/Operation.java b/src/main/java/com/cloudconvert/dto/Operation.java index 52ee515..31a0ed8 100644 --- a/src/main/java/com/cloudconvert/dto/Operation.java +++ b/src/main/java/com/cloudconvert/dto/Operation.java @@ -12,6 +12,10 @@ public enum Operation { ARCHIVE("archive"), ARCHIVE_EXTRACT("archive/extract"), COMMAND("command"), + THUMBNAIL("thumbnail"), + WATERMARK("watermark"), + METADATA("metadata"), + METADATA_WRITE("metadata/write"), IMPORT_URL("import/url"), IMPORT_UPLOAD("import/upload"), @@ -20,10 +24,12 @@ public enum Operation { IMPORT_GOOGLE_CLOUD_STORAGE("import/google-cloud-storage"), IMPORT_OPENSTACK("import/openstack"), IMPORT_SFTP("import/sftp"), + IMPORT_BASE64("import/base64"), + IMPORT_RAW("import/raw"), EXPORT_URL("export/url"), EXPORT_S3("export/s3"), - EXPORT_AZURE_BLOB("export/azure-blob"), + EXPORT_AZURE_BLOB("export/azure/blob"), EXPORT_GOOGLE_CLOUD_STORAGE("export/google-cloud-storage"), EXPORT_OPENSTACK("export/openstack"), EXPORT_SFTP("export/sftp"); @@ -35,4 +41,4 @@ public enum Operation { Operation(final String label) { this.label = label; } -} \ No newline at end of file +} diff --git a/src/main/java/com/cloudconvert/dto/request/AddWatermarkTaskRequest.java b/src/main/java/com/cloudconvert/dto/request/AddWatermarkTaskRequest.java new file mode 100644 index 0000000..8fefe00 --- /dev/null +++ b/src/main/java/com/cloudconvert/dto/request/AddWatermarkTaskRequest.java @@ -0,0 +1,55 @@ +package com.cloudconvert.dto.request; + +import com.cloudconvert.dto.Operation; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@Setter +@Accessors(chain = true) +@ToString +@EqualsAndHashCode(callSuper = true) +public class AddWatermarkTaskRequest extends TaskRequest { + + /** + * (required) The ID of the input task for the conversion, normally the import task. Multiple task IDs can be provided as an array. + */ + private List input; + + /** + * (optional) The current format of the file, e.g. pdf. If not set, the extension of the input file is used as input format. + */ + private String inputFormat; + + /** + * (optional) Use a specific engine for the conversion. + */ + private String engine; + + /** + * (optional) Use a specific engine version for the conversion. + */ + private String engineVersion; + + /** + * (optional) Choose a filename (including extension) for the output file. + */ + private String filename; + + public AddWatermarkTaskRequest setInput(final String... input) { + this.input = Arrays.stream(input).collect(Collectors.toList()); + return this; + } + + @Override + public Operation getOperation() { + return Operation.WATERMARK; + } +} diff --git a/src/main/java/com/cloudconvert/dto/request/Base64ImportRequest.java b/src/main/java/com/cloudconvert/dto/request/Base64ImportRequest.java new file mode 100644 index 0000000..b75c399 --- /dev/null +++ b/src/main/java/com/cloudconvert/dto/request/Base64ImportRequest.java @@ -0,0 +1,31 @@ +package com.cloudconvert.dto.request; + +import com.cloudconvert.dto.Operation; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +@Getter +@Setter +@Accessors(chain = true) +@ToString +@EqualsAndHashCode(callSuper = true) +public class Base64ImportRequest extends TaskRequest{ + + /*** + * (required) The base64 encoded file content. + */ + private String file; + + /*** + * (required) The filename of the input file, including extension. + */ + private String filename; + + @Override + public Operation getOperation() { + return Operation.IMPORT_BASE64; + } +} diff --git a/src/main/java/com/cloudconvert/dto/request/CreateThumbnailsTaskRequest.java b/src/main/java/com/cloudconvert/dto/request/CreateThumbnailsTaskRequest.java new file mode 100644 index 0000000..0a97e07 --- /dev/null +++ b/src/main/java/com/cloudconvert/dto/request/CreateThumbnailsTaskRequest.java @@ -0,0 +1,60 @@ +package com.cloudconvert.dto.request; + +import com.cloudconvert.dto.Operation; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@Setter +@Accessors(chain = true) +@ToString +@EqualsAndHashCode(callSuper = true) +public class CreateThumbnailsTaskRequest extends TaskRequest { + + /** + * (required) The ID of the input task for the conversion, normally the import task. Multiple task IDs can be provided as an array. + */ + private List input; + + /** + * (optional) The current format of the file, e.g. pdf. If not set, the extension of the input file is used as input format. + */ + private String inputFormat; + + /** + * (required) The target format to create the thumbnail. + */ + private String outputFormat; + + /** + * (optional) Use a specific engine for the conversion. + */ + private String engine; + + /** + * (optional) Use a specific engine version for the conversion. + */ + private String engineVersion; + + /** + * (optional) Choose a filename (including extension) for the output file. + */ + private String filename; + + public CreateThumbnailsTaskRequest setInput(final String... input) { + this.input = Arrays.stream(input).collect(Collectors.toList()); + return this; + } + + @Override + public Operation getOperation() { + return Operation.THUMBNAIL; + } +} diff --git a/src/main/java/com/cloudconvert/dto/request/GetMetadataTaskRequest.java b/src/main/java/com/cloudconvert/dto/request/GetMetadataTaskRequest.java new file mode 100644 index 0000000..85d414e --- /dev/null +++ b/src/main/java/com/cloudconvert/dto/request/GetMetadataTaskRequest.java @@ -0,0 +1,51 @@ +package com.cloudconvert.dto.request; + +import com.cloudconvert.dto.Operation; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@Setter +@Accessors(chain = true) +@ToString +@EqualsAndHashCode(callSuper = true) +public class GetMetadataTaskRequest extends TaskRequest { + + /** + * (required) The ID of the input task for the conversion, normally the import task. Multiple task IDs can be provided as an array. + */ + private List input; + + /** + * (optional) The current format of the file, e.g. pdf. If not set, the extension of the input file is used as input format. + */ + private String inputFormat; + + /** + * (optional) Use a specific engine for the conversion. + */ + private String engine; + + /** + * (optional) Use a specific engine version for the conversion. + */ + private String engineVersion; + + + public GetMetadataTaskRequest setInput(final String... input) { + this.input = Arrays.stream(input).collect(Collectors.toList()); + return this; + } + + @Override + public Operation getOperation() { + return Operation.METADATA; + } +} diff --git a/src/main/java/com/cloudconvert/dto/request/RawImportRequest.java b/src/main/java/com/cloudconvert/dto/request/RawImportRequest.java new file mode 100644 index 0000000..4cea8d6 --- /dev/null +++ b/src/main/java/com/cloudconvert/dto/request/RawImportRequest.java @@ -0,0 +1,31 @@ +package com.cloudconvert.dto.request; + +import com.cloudconvert.dto.Operation; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +@Getter +@Setter +@Accessors(chain = true) +@ToString +@EqualsAndHashCode(callSuper = true) +public class RawImportRequest extends TaskRequest{ + + /*** + * (required) The raw file content. + */ + private String file; + + /*** + * (required) The filename of the input file, including extension. + */ + private String filename; + + @Override + public Operation getOperation() { + return Operation.IMPORT_RAW; + } +} diff --git a/src/main/java/com/cloudconvert/dto/request/Request.java b/src/main/java/com/cloudconvert/dto/request/Request.java index d602044..ad42e5b 100644 --- a/src/main/java/com/cloudconvert/dto/request/Request.java +++ b/src/main/java/com/cloudconvert/dto/request/Request.java @@ -60,7 +60,7 @@ public Object getProperty(@NotNull final String key) { } /** - * Get specific option. Shortcut for {@link #getProperties()} + * Get specific option. Shortcut for {@link #getProperty(String)} * * @param key key * @return specific option value diff --git a/src/main/java/com/cloudconvert/dto/request/WriteMetadataTaskRequest.java b/src/main/java/com/cloudconvert/dto/request/WriteMetadataTaskRequest.java new file mode 100644 index 0000000..f678d02 --- /dev/null +++ b/src/main/java/com/cloudconvert/dto/request/WriteMetadataTaskRequest.java @@ -0,0 +1,57 @@ +package com.cloudconvert.dto.request; + +import com.cloudconvert.dto.Operation; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Getter +@Setter +@Accessors(chain = true) +@ToString +@EqualsAndHashCode(callSuper = true) +public class WriteMetadataTaskRequest extends TaskRequest { + + /** + * (required) The ID of the input task for the conversion, normally the import task. Multiple task IDs can be provided as an array. + */ + private List input; + + /** + * (optional) The current format of the file, e.g. pdf. If not set, the extension of the input file is used as input format. + */ + private String inputFormat; + + /** + * (optional) Use a specific engine for the conversion. + */ + private String engine; + + /** + * (required) Keys and values of metadata to write. Possible keys include Title, Author, Creator, Producer. + */ + private Map metadata; + + /** + * (optional) Use a specific engine version for the conversion. + */ + private String engineVersion; + + + public WriteMetadataTaskRequest setInput(final String... input) { + this.input = Arrays.stream(input).collect(Collectors.toList()); + return this; + } + + @Override + public Operation getOperation() { + return Operation.METADATA_WRITE; + } +} diff --git a/src/main/java/com/cloudconvert/dto/response/ErrorResponse.java b/src/main/java/com/cloudconvert/dto/response/ErrorResponse.java new file mode 100644 index 0000000..2ac3fa8 --- /dev/null +++ b/src/main/java/com/cloudconvert/dto/response/ErrorResponse.java @@ -0,0 +1,23 @@ +package com.cloudconvert.dto.response; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import javax.annotation.Nullable; +import java.util.Map; + +@Getter +@Setter +@Accessors(chain = true) +@ToString +public class ErrorResponse { + + private String code; + + private String message; + + @Nullable + private Map errors; +} diff --git a/src/main/java/com/cloudconvert/dto/response/TaskResponse.java b/src/main/java/com/cloudconvert/dto/response/TaskResponse.java index b922351..7394168 100644 --- a/src/main/java/com/cloudconvert/dto/response/TaskResponse.java +++ b/src/main/java/com/cloudconvert/dto/response/TaskResponse.java @@ -145,6 +145,10 @@ public static class Form { private Map parameters; } + + + private Map metadata; + } diff --git a/src/main/java/com/cloudconvert/dto/result/AsyncResult.java b/src/main/java/com/cloudconvert/dto/result/AsyncResult.java index 84e4df5..4019411 100644 --- a/src/main/java/com/cloudconvert/dto/result/AsyncResult.java +++ b/src/main/java/com/cloudconvert/dto/result/AsyncResult.java @@ -1,5 +1,8 @@ package com.cloudconvert.dto.result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; + import java.io.IOException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -7,9 +10,9 @@ public abstract class AsyncResult extends AbstractResult { - public abstract Result get() throws InterruptedException, ExecutionException, IOException; + public abstract Result get() throws InterruptedException, ExecutionException, IOException, CloudConvertClientException, CloudConvertServerException; public abstract Result get( final long timeout, final TimeUnit timeUnit - ) throws InterruptedException, ExecutionException, TimeoutException, IOException; + ) throws InterruptedException, ExecutionException, TimeoutException, IOException, CloudConvertClientException, CloudConvertServerException; } diff --git a/src/main/java/com/cloudconvert/dto/result/FutureAsyncResult.java b/src/main/java/com/cloudconvert/dto/result/FutureAsyncResult.java index 30066d8..d1ed41f 100644 --- a/src/main/java/com/cloudconvert/dto/result/FutureAsyncResult.java +++ b/src/main/java/com/cloudconvert/dto/result/FutureAsyncResult.java @@ -1,5 +1,7 @@ package com.cloudconvert.dto.result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.extractor.ResultExtractor; import com.fasterxml.jackson.core.type.TypeReference; import lombok.Builder; @@ -24,20 +26,22 @@ public class FutureAsyncResult extends AsyncResult { @Nullable private Result result; - public Result get() throws InterruptedException, ExecutionException, IOException { + public Result get() throws InterruptedException, ExecutionException, IOException, CloudConvertClientException, CloudConvertServerException { return extractResult(future.get()); } public Result get( final long timeout, final TimeUnit timeUnit - ) throws InterruptedException, ExecutionException, TimeoutException, IOException { + ) throws InterruptedException, ExecutionException, TimeoutException, IOException, CloudConvertClientException, CloudConvertServerException { return extractResult(future.get(timeout, timeUnit)); } /** * This method should be synchronized in order to prevent unexpected behavior if multiple threads tries to access an input stream */ - private synchronized Result extractResult(final HttpResponse httpResponse) throws IOException { + private synchronized Result extractResult( + final HttpResponse httpResponse + ) throws IOException, CloudConvertClientException, CloudConvertServerException { // Cache result, in case user will try to call get() multiple times if (result == null) { result = resultExtractor.extract(httpResponse, typeReference); diff --git a/src/main/java/com/cloudconvert/dto/result/Result.java b/src/main/java/com/cloudconvert/dto/result/Result.java index 71a2575..424afd8 100644 --- a/src/main/java/com/cloudconvert/dto/result/Result.java +++ b/src/main/java/com/cloudconvert/dto/result/Result.java @@ -10,14 +10,11 @@ public class Result extends AbstractResult { @Getter - private int status; + private Status status; @Getter private Map headers; - @Getter - private String message; - @Getter @Nullable private T body; diff --git a/src/main/java/com/cloudconvert/dto/result/Status.java b/src/main/java/com/cloudconvert/dto/result/Status.java new file mode 100644 index 0000000..0208da4 --- /dev/null +++ b/src/main/java/com/cloudconvert/dto/result/Status.java @@ -0,0 +1,34 @@ +package com.cloudconvert.dto.result; + +import lombok.Builder; +import lombok.Getter; + +@Builder +public class Status { + + @Getter + private int code; + + @Getter + private String reason; + + public boolean isInformational() { + return 100 <= code && code <= 199; + } + + public boolean isSuccessful() { + return 200 <= code && code <= 299; + } + + public boolean isRedirection() { + return 300 <= code && code <= 399; + } + + public boolean isClientError() { + return 400 <= code && code <= 499; + } + + public boolean isServerError() { + return 500 <= code && code <= 599; + } +} diff --git a/src/main/java/com/cloudconvert/exception/CloudConvertClientException.java b/src/main/java/com/cloudconvert/exception/CloudConvertClientException.java new file mode 100644 index 0000000..d24a1e5 --- /dev/null +++ b/src/main/java/com/cloudconvert/exception/CloudConvertClientException.java @@ -0,0 +1,23 @@ +package com.cloudconvert.exception; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.dto.result.Status; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +public class CloudConvertClientException extends CloudConvertException { + + public CloudConvertClientException( + final Status status, final Map headers, final InputStream inputStream + ) throws IOException { + this(status, headers, inputStream, new ObjectMapperProvider()); + } + + public CloudConvertClientException( + final Status status, final Map headers, final InputStream inputStream, final ObjectMapperProvider objectMapperProvider + ) throws IOException { + super(status, headers, inputStream, objectMapperProvider); + } +} diff --git a/src/main/java/com/cloudconvert/exception/CloudConvertException.java b/src/main/java/com/cloudconvert/exception/CloudConvertException.java new file mode 100644 index 0000000..2fba097 --- /dev/null +++ b/src/main/java/com/cloudconvert/exception/CloudConvertException.java @@ -0,0 +1,39 @@ +package com.cloudconvert.exception; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.dto.response.ErrorResponse; +import com.cloudconvert.dto.result.Status; +import com.google.common.base.Charsets; +import com.google.common.io.ByteSource; +import lombok.Getter; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +public class CloudConvertException extends Exception { + + @Getter + private final Status status; + + @Getter + private final Map headers; + + @Getter + private final ErrorResponse body; + + public CloudConvertException( + final Status status, final Map headers, final InputStream inputStream, final ObjectMapperProvider objectMapperProvider + ) throws IOException { + final ByteSource byteSource = new ByteSource() { + @Override + public InputStream openStream() throws IOException { + return inputStream; + } + }; + + this.status = status; + this.headers = headers; + this.body = objectMapperProvider.provide().readValue(byteSource.asCharSource(Charsets.UTF_8).read(), ErrorResponse.class); + } +} diff --git a/src/main/java/com/cloudconvert/exception/CloudConvertServerException.java b/src/main/java/com/cloudconvert/exception/CloudConvertServerException.java new file mode 100644 index 0000000..22a0e69 --- /dev/null +++ b/src/main/java/com/cloudconvert/exception/CloudConvertServerException.java @@ -0,0 +1,23 @@ +package com.cloudconvert.exception; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.dto.result.Status; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +public class CloudConvertServerException extends CloudConvertException { + + public CloudConvertServerException( + final Status status, final Map headers, final InputStream inputStream + ) throws IOException { + this(status, headers, inputStream, new ObjectMapperProvider()); + } + + public CloudConvertServerException( + final Status status, final Map headers, final InputStream inputStream, final ObjectMapperProvider objectMapperProvider + ) throws IOException { + super(status, headers, inputStream, objectMapperProvider); + } +} diff --git a/src/main/java/com/cloudconvert/executor/RequestExecutor.java b/src/main/java/com/cloudconvert/executor/RequestExecutor.java index 408bfe2..107b1a4 100644 --- a/src/main/java/com/cloudconvert/executor/RequestExecutor.java +++ b/src/main/java/com/cloudconvert/executor/RequestExecutor.java @@ -2,6 +2,8 @@ import com.cloudconvert.client.http.CloseableHttpClientProvider; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.extractor.ResultExtractor; import com.fasterxml.jackson.core.type.TypeReference; import org.apache.http.client.methods.HttpUriRequest; @@ -21,7 +23,7 @@ public RequestExecutor( public Result execute( @NotNull final HttpUriRequest httpUriRequest, @NotNull final TypeReference typeReference - ) throws IOException { + ) throws IOException, CloudConvertClientException, CloudConvertServerException { return getResultExtractor().extract(getCloseableHttpClient().execute(httpUriRequest), typeReference); } } diff --git a/src/main/java/com/cloudconvert/extractor/ResultExtractor.java b/src/main/java/com/cloudconvert/extractor/ResultExtractor.java index ee1caee..bf17445 100644 --- a/src/main/java/com/cloudconvert/extractor/ResultExtractor.java +++ b/src/main/java/com/cloudconvert/extractor/ResultExtractor.java @@ -2,6 +2,9 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.dto.result.Status; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.processor.response.DefaultResponseProcessor; import com.cloudconvert.processor.response.ResponseProcessor; import com.cloudconvert.processor.response.successful.ContentResponseProcessor; @@ -13,13 +16,16 @@ import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; import org.apache.http.entity.InputStreamEntity; import org.apache.http.impl.io.EmptyInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.Arrays; import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; public class ResultExtractor { @@ -50,15 +56,23 @@ public ResultExtractor(final ObjectMapperProvider objectMapperProvider) { public Result extract( final HttpResponse httpResponse, final TypeReference typeReference - ) throws IOException { - final int status = httpResponse.getStatusLine().getStatusCode(); - final Header[] headers = httpResponse.getAllHeaders(); + ) throws IOException, CloudConvertClientException, CloudConvertServerException { + final StatusLine statusLine = httpResponse.getStatusLine(); + + final Status status = Status.builder().code(statusLine.getStatusCode()).reason(statusLine.getReasonPhrase()).build(); + final Map headers = Arrays.stream(httpResponse.getAllHeaders()).collect(Collectors.toMap(Header::getName, Header::getValue, (v1, v2) -> v1 + ", " + v2)); final HttpEntity httpEntity = Optional.ofNullable(httpResponse.getEntity()).orElse(new InputStreamEntity(EmptyInputStream.INSTANCE)); try (final InputStream inputStream = httpEntity.getContent()) { - if (status >= 200 && status <= 299) { + if (status.isSuccessful()) { return responseProcessors.getOrDefault(typeReference, defaultResponseProcessor).process(status, headers, inputStream, typeReference); } + if (status.isClientError()) { + throw new CloudConvertClientException(status, headers, inputStream); + } + if (status.isServerError()) { + throw new CloudConvertServerException(status, headers, inputStream); + } return defaultResponseProcessor.process(status, headers, inputStream, typeReference); } diff --git a/src/main/java/com/cloudconvert/processor/response/DefaultResponseProcessor.java b/src/main/java/com/cloudconvert/processor/response/DefaultResponseProcessor.java index 941a8c1..2b5af2f 100644 --- a/src/main/java/com/cloudconvert/processor/response/DefaultResponseProcessor.java +++ b/src/main/java/com/cloudconvert/processor/response/DefaultResponseProcessor.java @@ -1,30 +1,18 @@ package com.cloudconvert.processor.response; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.dto.result.Status; import com.fasterxml.jackson.core.type.TypeReference; -import com.google.common.base.Charsets; -import com.google.common.io.ByteSource; -import org.apache.http.Header; -import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; -import java.util.stream.Collectors; +import java.util.Map; public class DefaultResponseProcessor implements ResponseProcessor { @Override public Result process( - final int status, final Header[] headers, final InputStream inputStream, final TypeReference typeReference - ) throws IOException { - final ByteSource byteSource = new ByteSource() { - @Override - public InputStream openStream() throws IOException { - return inputStream; - } - }; - - return Result.builder().status(status).headers(Arrays.stream(headers).collect(Collectors.toMap(Header::getName, Header::getValue))) - .message(byteSource.asCharSource(Charsets.UTF_8).read()).build(); + final Status status, final Map headers, final InputStream inputStream, final TypeReference typeReference + ) { + return Result.builder().status(status).headers(headers).build(); } } diff --git a/src/main/java/com/cloudconvert/processor/response/ResponseProcessor.java b/src/main/java/com/cloudconvert/processor/response/ResponseProcessor.java index e18234e..c88e319 100644 --- a/src/main/java/com/cloudconvert/processor/response/ResponseProcessor.java +++ b/src/main/java/com/cloudconvert/processor/response/ResponseProcessor.java @@ -1,15 +1,16 @@ package com.cloudconvert.processor.response; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.dto.result.Status; import com.fasterxml.jackson.core.type.TypeReference; -import org.apache.http.Header; import java.io.IOException; import java.io.InputStream; +import java.util.Map; public interface ResponseProcessor { Result process( - final int status, final Header[] headers, final InputStream inputStream, final TypeReference typeReference + final Status status, final Map headers, final InputStream inputStream, final TypeReference typeReference ) throws IOException; } diff --git a/src/main/java/com/cloudconvert/processor/response/successful/ContentResponseProcessor.java b/src/main/java/com/cloudconvert/processor/response/successful/ContentResponseProcessor.java index 0febba3..661219c 100644 --- a/src/main/java/com/cloudconvert/processor/response/successful/ContentResponseProcessor.java +++ b/src/main/java/com/cloudconvert/processor/response/successful/ContentResponseProcessor.java @@ -2,6 +2,7 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.dto.result.Status; import com.cloudconvert.processor.content.ContentPreProcessor; import com.cloudconvert.processor.content.DataExtractingContentPreProcessor; import com.cloudconvert.processor.content.DefaultContentPreProcessor; @@ -9,13 +10,10 @@ import com.cloudconvert.resource.AbstractResource; import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.ImmutableMap; -import org.apache.http.Header; import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; import java.util.Map; -import java.util.stream.Collectors; public class ContentResponseProcessor implements ResponseProcessor { @@ -39,11 +37,10 @@ public ContentResponseProcessor(final ObjectMapperProvider objectMapperProvider) @Override public Result process( - final int status, final Header[] headers, final InputStream inputStream, final TypeReference typeReference + final Status status, final Map headers, final InputStream inputStream, final TypeReference typeReference ) throws IOException { final String string = contentPreProcessors.getOrDefault(typeReference, defaultContentPreProcessor).preProcess(inputStream); - return Result.builder().status(status).headers(Arrays.stream(headers).collect(Collectors.toMap(Header::getName, Header::getValue, (v1, v2) -> v1 + ", " + v2))) - .message("").body(objectMapperProvider.provide().readValue(string, typeReference)).build(); + return Result.builder().status(status).headers(headers).body(objectMapperProvider.provide().readValue(string, typeReference)).build(); } } diff --git a/src/main/java/com/cloudconvert/processor/response/successful/InputStreamResponseProcessor.java b/src/main/java/com/cloudconvert/processor/response/successful/InputStreamResponseProcessor.java index ae9a089..a6da8f4 100644 --- a/src/main/java/com/cloudconvert/processor/response/successful/InputStreamResponseProcessor.java +++ b/src/main/java/com/cloudconvert/processor/response/successful/InputStreamResponseProcessor.java @@ -1,22 +1,21 @@ package com.cloudconvert.processor.response.successful; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.dto.result.Status; import com.cloudconvert.processor.response.ResponseProcessor; import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.io.ByteSource; -import org.apache.http.Header; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; -import java.util.stream.Collectors; +import java.util.Map; public class InputStreamResponseProcessor implements ResponseProcessor { @Override public Result process( - final int status, final Header[] headers, final InputStream inputStream, final TypeReference typeReference + final Status status, final Map headers, final InputStream inputStream, final TypeReference typeReference ) throws IOException { final ByteSource byteSource = new ByteSource() { @Override @@ -25,7 +24,6 @@ public InputStream openStream() throws IOException { } }; - return Result.builder().headers(Arrays.stream(headers).collect(Collectors.toMap(Header::getName, Header::getValue))) - .message("").body((T) new ByteArrayInputStream(byteSource.read())).status(status).build(); + return Result.builder().status(status).headers(headers).body((T) new ByteArrayInputStream(byteSource.read())).build(); } } diff --git a/src/main/java/com/cloudconvert/processor/response/successful/NoContentResponseProcessor.java b/src/main/java/com/cloudconvert/processor/response/successful/NoContentResponseProcessor.java index c2b1d72..040cfca 100644 --- a/src/main/java/com/cloudconvert/processor/response/successful/NoContentResponseProcessor.java +++ b/src/main/java/com/cloudconvert/processor/response/successful/NoContentResponseProcessor.java @@ -1,22 +1,19 @@ package com.cloudconvert.processor.response.successful; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.dto.result.Status; import com.cloudconvert.processor.response.ResponseProcessor; import com.fasterxml.jackson.core.type.TypeReference; -import org.apache.http.Header; -import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; -import java.util.stream.Collectors; +import java.util.Map; public class NoContentResponseProcessor implements ResponseProcessor { @Override public Result process( - final int status, final Header[] headers, final InputStream inputStream, final TypeReference typeReference - ) throws IOException { - return Result.builder().headers(Arrays.stream(headers).collect(Collectors.toMap(Header::getName, Header::getValue))) - .message("").status(status).build(); + final Status status, final Map headers, final InputStream inputStream, final TypeReference typeReference + ) { + return Result.builder().status(status).headers(headers).build(); } } diff --git a/src/main/java/com/cloudconvert/resource/AbstractAddWatermarkResource.java b/src/main/java/com/cloudconvert/resource/AbstractAddWatermarkResource.java new file mode 100644 index 0000000..d421df6 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/AbstractAddWatermarkResource.java @@ -0,0 +1,50 @@ +package com.cloudconvert.resource; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.AddWatermarkTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; +import com.google.common.collect.ImmutableList; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +public abstract class AbstractAddWatermarkResource> extends AbstractResource { + + public static final String PATH_SEGMENT_ADD_WATERMARK = "watermark"; + + public AbstractAddWatermarkResource( + final SettingsProvider settingsProvider, final ObjectMapperProvider objectMapperProvider + ) { + super(settingsProvider, objectMapperProvider); + } + + /** + * Create a task to add a watermark. + * + * @param addWatermarkTaskRequest {@link AddWatermarkTaskRequest} + * @return {@link TRAR} + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR watermark( + @NotNull final AddWatermarkTaskRequest addWatermarkTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + protected HttpUriRequest getWatermarkHttpUriRequest( + @NotNull final AddWatermarkTaskRequest addWatermarkTaskRequest + ) throws IOException, URISyntaxException { + final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_ADD_WATERMARK)); + final HttpEntity httpEntity = getHttpEntity(addWatermarkTaskRequest); + + return getHttpUriRequest(HttpPost.class, uri, httpEntity); + } +} diff --git a/src/main/java/com/cloudconvert/resource/AbstractCaptureWebsitesResource.java b/src/main/java/com/cloudconvert/resource/AbstractCaptureWebsitesResource.java index b67d522..468b037 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractCaptureWebsitesResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractCaptureWebsitesResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.google.common.collect.ImmutableList; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; @@ -35,7 +37,7 @@ public AbstractCaptureWebsitesResource( */ public abstract TRAR capture( @NotNull final CaptureWebsitesTaskRequest captureWebsitesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getCaptureHttpUriRequest( @NotNull final CaptureWebsitesTaskRequest captureWebsitesTaskRequest diff --git a/src/main/java/com/cloudconvert/resource/AbstractConvertFilesResource.java b/src/main/java/com/cloudconvert/resource/AbstractConvertFilesResource.java index 2ab3d7b..55d04a1 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractConvertFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractConvertFilesResource.java @@ -7,6 +7,8 @@ import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.resource.params.Filter; import com.cloudconvert.resource.params.Include; import com.cloudconvert.resource.params.converter.AlternativeToNameValuePairsConverter; @@ -57,7 +59,7 @@ public AbstractConvertFilesResource( */ public abstract TRAR convert( @NotNull final ConvertFilesTaskRequest convertFilesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getConvertHttpUriRequest( @NotNull final ConvertFilesTaskRequest convertFilesTaskRequest @@ -75,7 +77,7 @@ protected HttpUriRequest getConvertHttpUriRequest( * @throws IOException * @throws URISyntaxException */ - public abstract ORP convertFormats() throws IOException, URISyntaxException; + public abstract ORP convertFormats() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all supported formats, their engines and possible options. @@ -91,7 +93,7 @@ protected HttpUriRequest getConvertHttpUriRequest( */ public abstract ORP convertFormats( @NotNull final Map filters - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all supported formats, their engines and possible options. @@ -108,7 +110,7 @@ public abstract ORP convertFormats( */ public abstract ORP convertFormats( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all supported formats, their engines and possible options. @@ -127,7 +129,7 @@ public abstract ORP convertFormats( */ public abstract ORP convertFormats( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getConvertFormatsHttpUriRequest( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative diff --git a/src/main/java/com/cloudconvert/resource/AbstractCreateArchivesResource.java b/src/main/java/com/cloudconvert/resource/AbstractCreateArchivesResource.java index bbe01c8..edd4aa0 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractCreateArchivesResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractCreateArchivesResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.CreateArchivesTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.google.common.collect.ImmutableList; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; @@ -35,7 +37,7 @@ public AbstractCreateArchivesResource( */ public abstract TRAR archive( @NotNull final CreateArchivesTaskRequest createArchivesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getArchiveHttpUriRequest( @NotNull final CreateArchivesTaskRequest createArchivesTaskRequest diff --git a/src/main/java/com/cloudconvert/resource/AbstractCreateThumbnailsResource.java b/src/main/java/com/cloudconvert/resource/AbstractCreateThumbnailsResource.java new file mode 100644 index 0000000..1158fc8 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/AbstractCreateThumbnailsResource.java @@ -0,0 +1,50 @@ +package com.cloudconvert.resource; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.CreateThumbnailsTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; +import com.google.common.collect.ImmutableList; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +public abstract class AbstractCreateThumbnailsResource> extends AbstractResource { + + public static final String PATH_SEGMENT_CREATE_THUMBNAIL = "thumbnail"; + + public AbstractCreateThumbnailsResource( + final SettingsProvider settingsProvider, final ObjectMapperProvider objectMapperProvider + ) { + super(settingsProvider, objectMapperProvider); + } + + /** + * Create a task to create a thumbnail (png, jpg). + * + * @param createThumbnailsTaskRequest {@link CreateThumbnailsTaskRequest} + * @return {@link TRAR} + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR thumbnail( + @NotNull final CreateThumbnailsTaskRequest createThumbnailsTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + protected HttpUriRequest getThumbnailHttpUriRequest( + @NotNull final CreateThumbnailsTaskRequest createThumbnailsTaskRequest + ) throws IOException, URISyntaxException { + final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_CREATE_THUMBNAIL)); + final HttpEntity httpEntity = getHttpEntity(createThumbnailsTaskRequest); + + return getHttpUriRequest(HttpPost.class, uri, httpEntity); + } +} diff --git a/src/main/java/com/cloudconvert/resource/AbstractExecuteCommandsResource.java b/src/main/java/com/cloudconvert/resource/AbstractExecuteCommandsResource.java index f80bb1d..75fbfec 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractExecuteCommandsResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractExecuteCommandsResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.google.common.collect.ImmutableList; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; @@ -37,7 +39,7 @@ public AbstractExecuteCommandsResource( */ public abstract TRAR command( @NotNull final ExecuteCommandsTaskRequest executeCommandsTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getCommandHttpUriRequest( @NotNull final ExecuteCommandsTaskRequest executeCommandsTaskRequest diff --git a/src/main/java/com/cloudconvert/resource/AbstractExportFilesResource.java b/src/main/java/com/cloudconvert/resource/AbstractExportFilesResource.java index f6b11c5..27d72a5 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractExportFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractExportFilesResource.java @@ -10,6 +10,8 @@ import com.cloudconvert.dto.request.UrlExportRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.google.common.collect.ImmutableList; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; @@ -49,7 +51,7 @@ public AbstractExportFilesResource( */ public abstract TRAR url( @NotNull final UrlExportRequest urlExportRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getUrlHttpUriRequest( @NotNull final UrlExportRequest urlExportRequest @@ -70,7 +72,7 @@ protected HttpUriRequest getUrlHttpUriRequest( */ public abstract TRAR s3( @NotNull final S3ExportRequest s3ExportRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getS3HttpUriRequest( @NotNull final S3ExportRequest s3ExportRequest @@ -91,7 +93,7 @@ protected HttpUriRequest getS3HttpUriRequest( */ public abstract TRAR azureBlob( @NotNull final AzureBlobExportRequest azureBlobExportRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getAzureBlobHttpUriRequest( @NotNull final AzureBlobExportRequest azureBlobExportRequest @@ -112,7 +114,7 @@ protected HttpUriRequest getAzureBlobHttpUriRequest( */ public abstract TRAR googleCloudStorage( @NotNull final GoogleCloudStorageExportRequest googleCloudStorageExportRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getGoogleCloudStorageHttpUriRequest( @NotNull final GoogleCloudStorageExportRequest googleCloudStorageExportRequest @@ -133,7 +135,7 @@ protected HttpUriRequest getGoogleCloudStorageHttpUriRequest( */ public abstract TRAR openStack( @NotNull final OpenStackExportRequest openStackExportRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getOpenStackStorageHttpUriRequest( @NotNull final OpenStackExportRequest openStackExportRequest @@ -154,7 +156,7 @@ protected HttpUriRequest getOpenStackStorageHttpUriRequest( */ public abstract TRAR sftp( @NotNull final SftpExportRequest sftpExportRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getSftpStorageHttpUriRequest( @NotNull final SftpExportRequest sftpExportRequest diff --git a/src/main/java/com/cloudconvert/resource/AbstractFilesResource.java b/src/main/java/com/cloudconvert/resource/AbstractFilesResource.java index 3cfd3cd..eb30531 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractFilesResource.java @@ -3,6 +3,8 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.utils.URIBuilder; @@ -31,7 +33,7 @@ public AbstractFilesResource( */ public abstract ISAR download( @NotNull final String path - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getDownloadHttpUriRequest( @NotNull final String path diff --git a/src/main/java/com/cloudconvert/resource/AbstractGetMetadataResource.java b/src/main/java/com/cloudconvert/resource/AbstractGetMetadataResource.java new file mode 100644 index 0000000..662e6c8 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/AbstractGetMetadataResource.java @@ -0,0 +1,50 @@ +package com.cloudconvert.resource; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.GetMetadataTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; +import com.google.common.collect.ImmutableList; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +public abstract class AbstractGetMetadataResource> extends AbstractResource { + + public static final String PATH_SEGMENT_METADATA = "metadata"; + + public AbstractGetMetadataResource( + final SettingsProvider settingsProvider, final ObjectMapperProvider objectMapperProvider + ) { + super(settingsProvider, objectMapperProvider); + } + + /** + * Create a task to optimize and compress a file. Currently supported formats are PDF, PNG and JPG. + * + * @param getMetadataTaskRequest {@link GetMetadataTaskRequest} + * @return {@link TRAR} + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR metadata( + @NotNull final GetMetadataTaskRequest getMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + protected HttpUriRequest getMetadataHttpUriRequest( + @NotNull final GetMetadataTaskRequest getMetadataTaskRequest + ) throws IOException, URISyntaxException { + final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_METADATA)); + final HttpEntity httpEntity = getHttpEntity(getMetadataTaskRequest); + + return getHttpUriRequest(HttpPost.class, uri, httpEntity); + } +} diff --git a/src/main/java/com/cloudconvert/resource/AbstractImportFilesResource.java b/src/main/java/com/cloudconvert/resource/AbstractImportFilesResource.java index d23c5b2..75e8951 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractImportFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractImportFilesResource.java @@ -3,14 +3,18 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.request.AzureBlobImportRequest; +import com.cloudconvert.dto.request.Base64ImportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest; import com.cloudconvert.dto.request.OpenStackImportRequest; +import com.cloudconvert.dto.request.RawImportRequest; import com.cloudconvert.dto.request.S3ImportRequest; import com.cloudconvert.dto.request.SftpImportRequest; import com.cloudconvert.dto.request.UploadImportRequest; import com.cloudconvert.dto.request.UrlImportRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.google.common.collect.ImmutableList; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; @@ -45,11 +49,13 @@ public abstract class AbstractImportFilesResource + * Upload file immediately + * + * @param uploadImportRequest {@link UploadImportRequest} + * @param inputStream {@link InputStream} of file which will be uploaded + * @param filename Set the filename, including file extension + * @return TRD + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR upload( + @NotNull final UploadImportRequest uploadImportRequest, @NotNull final InputStream inputStream, @NotNull String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a task which uploads one input file. @@ -170,8 +193,25 @@ public abstract TRAR upload( * @throws URISyntaxException */ public abstract TRAR upload( - @NotNull final TRAR taskResponseResult, @NotNull final InputStream inputStream - ) throws IOException, URISyntaxException; + @NotNull final TRAR taskResponseResult, @NotNull final InputStream inputStream + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + /** + * Create a task which uploads one input file. + * It allows your users to directly upload input files to CloudConvert, without temporary storing them on your server. + *

+ * Upload file using existing task response data result + * + * @param taskResponseResult {@link TRAR} + * @param inputStream {@link InputStream} of file which will be uploaded + * @param filename Set the filename, including file extension + * @return TRD + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR upload( + @NotNull final TRAR taskResponseResult, @NotNull final InputStream inputStream, @NotNull final String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a task which uploads one input file. @@ -187,8 +227,26 @@ public abstract TRAR upload( * @throws URISyntaxException */ public abstract TRAR upload( - @NotNull final String taskId, @NotNull final TaskResponse.Result.Form taskResponseResultForm, @NotNull final InputStream inputStream - ) throws IOException, URISyntaxException; + @NotNull final String taskId, @NotNull final TaskResponse.Result.Form taskResponseResultForm, @NotNull final InputStream inputStream + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + /** + * Create a task which uploads one input file. + * It allows your users to directly upload input files to CloudConvert, without temporary storing them on your server. + *

+ * Upload file using existing task id and {@link com.cloudconvert.dto.response.TaskResponse.Result.Form} + * + * @param taskId task + * @param taskResponseResultForm {@link com.cloudconvert.dto.response.TaskResponse.Result.Form} + * @param inputStream {@link InputStream} of file which will be uploaded + * @param filename Set the filename, including file extension + * @return + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR upload( + @NotNull final String taskId, @NotNull final TaskResponse.Result.Form taskResponseResultForm, @NotNull final InputStream inputStream, @NotNull final String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a task to import files by downloading it from a S3 bucket. @@ -199,11 +257,11 @@ public abstract TRAR upload( * @throws URISyntaxException */ public abstract TRAR s3( - @NotNull final S3ImportRequest s3ImportRequest - ) throws IOException, URISyntaxException; + @NotNull final S3ImportRequest s3ImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getS3HttpUriRequest( - @NotNull final S3ImportRequest s3ImportRequest + @NotNull final S3ImportRequest s3ImportRequest ) throws IOException, URISyntaxException { final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_S3)); final HttpEntity httpEntity = getHttpEntity(s3ImportRequest); @@ -220,11 +278,11 @@ protected HttpUriRequest getS3HttpUriRequest( * @throws URISyntaxException */ public abstract TRAR azureBlob( - @NotNull final AzureBlobImportRequest azureBlobImportRequest - ) throws IOException, URISyntaxException; + @NotNull final AzureBlobImportRequest azureBlobImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getAzureBlobHttpUriRequest( - @NotNull final AzureBlobImportRequest azureBlobImportRequest + @NotNull final AzureBlobImportRequest azureBlobImportRequest ) throws IOException, URISyntaxException { final URI uri = getUri(ImmutableList.builder().add(PATH_SEGMENT_IMPORT).addAll(PATH_SEGMENTS_AZURE_BLOB).build()); final HttpEntity httpEntity = getHttpEntity(azureBlobImportRequest); @@ -241,11 +299,11 @@ protected HttpUriRequest getAzureBlobHttpUriRequest( * @throws URISyntaxException */ public abstract TRAR googleCloudStorage( - @NotNull final GoogleCloudStorageImportRequest googleCloudStorageImportRequest - ) throws IOException, URISyntaxException; + @NotNull final GoogleCloudStorageImportRequest googleCloudStorageImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getGoogleCloudHttpUriRequest( - @NotNull final GoogleCloudStorageImportRequest googleCloudStorageImportRequest + @NotNull final GoogleCloudStorageImportRequest googleCloudStorageImportRequest ) throws IOException, URISyntaxException { final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_GOOGLE_CLOUD_STORAGE)); final HttpEntity httpEntity = getHttpEntity(googleCloudStorageImportRequest); @@ -262,11 +320,11 @@ protected HttpUriRequest getGoogleCloudHttpUriRequest( * @throws URISyntaxException */ public abstract TRAR openStack( - @NotNull final OpenStackImportRequest openStackImportRequest - ) throws IOException, URISyntaxException; + @NotNull final OpenStackImportRequest openStackImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getOpenStackHttpUriRequest( - @NotNull final OpenStackImportRequest openStackImportRequest + @NotNull final OpenStackImportRequest openStackImportRequest ) throws IOException, URISyntaxException { final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_OPENSTACK)); final HttpEntity httpEntity = getHttpEntity(openStackImportRequest); @@ -283,11 +341,11 @@ protected HttpUriRequest getOpenStackHttpUriRequest( * @throws URISyntaxException */ public abstract TRAR sftp( - @NotNull final SftpImportRequest sftpImportRequest - ) throws IOException, URISyntaxException; + @NotNull final SftpImportRequest sftpImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getSftpHttpUriRequest( - @NotNull final SftpImportRequest sftpImportRequest + @NotNull final SftpImportRequest sftpImportRequest ) throws IOException, URISyntaxException { final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_SFTP)); final HttpEntity httpEntity = getHttpEntity(sftpImportRequest); @@ -295,15 +353,57 @@ protected HttpUriRequest getSftpHttpUriRequest( return getHttpUriRequest(HttpPost.class, uri, httpEntity); } + /*** + * Create a task to import a base64 file + * + * @param base64ImportRequest + * @return + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR base64( + @NotNull final Base64ImportRequest base64ImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + protected HttpUriRequest getBase64HttpUriRequest( + @NotNull final Base64ImportRequest base64ImportRequest + ) throws IOException, URISyntaxException { + final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_BASE64)); + final HttpEntity httpEntity = getHttpEntity(base64ImportRequest); + + return getHttpUriRequest(HttpPost.class, uri, httpEntity); + } + + /*** + * Create a task to import raw file + * + * @param rawImportRequest + * @return + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR raw( + @NotNull final RawImportRequest rawImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + protected HttpUriRequest getRawHttpUriRequest( + @NotNull final RawImportRequest rawImportRequest + ) throws IOException, URISyntaxException { + final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_RAW)); + final HttpEntity httpEntity = getHttpEntity(rawImportRequest); + + return getHttpUriRequest(HttpPost.class, uri, httpEntity); + } + protected HttpEntity getMultipartHttpEntity( - final TaskResponse.Result.Form uploadImportResponseResultForm, final File file + final TaskResponse.Result.Form uploadImportResponseResultForm, final File file ) throws IOException { // We still need to convert File to InputStream here, because if we don't, then async client will fail with ContentTooLongException if we do not return getMultipartHttpEntity(uploadImportResponseResultForm, file.getName(), new FileInputStream(file)); } protected HttpEntity getMultipartHttpEntity( - final TaskResponse.Result.Form uploadImportResponseResultForm, final InputStream inputStream + final TaskResponse.Result.Form uploadImportResponseResultForm, final InputStream inputStream ) throws IOException { try { final MimeType mimeType = MimeTypes.getDefaultMimeTypes().forName(tika.detect(inputStream)); @@ -314,12 +414,11 @@ protected HttpEntity getMultipartHttpEntity( } protected HttpEntity getMultipartHttpEntity( - final TaskResponse.Result.Form uploadImportResponseResultForm, - @NotNull final String filename, final InputStream inputStream + final TaskResponse.Result.Form uploadImportResponseResultForm, @NotNull final String filename, final InputStream inputStream ) throws IOException { final MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create().setContentType(ContentType.MULTIPART_FORM_DATA); uploadImportResponseResultForm.getParameters().forEach(multipartEntityBuilder::addTextBody); return new BufferedHttpEntity(multipartEntityBuilder.addPart( - FormBodyPartBuilder.create("form", new InputStreamBody(new BufferedInputStream(inputStream), filename)).build()).build()); + FormBodyPartBuilder.create("file", new InputStreamBody(new BufferedInputStream(inputStream), filename)).build()).build()); } } diff --git a/src/main/java/com/cloudconvert/resource/AbstractJobsResource.java b/src/main/java/com/cloudconvert/resource/AbstractJobsResource.java index 99622b0..bd9620b 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractJobsResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractJobsResource.java @@ -6,6 +6,8 @@ import com.cloudconvert.dto.response.JobResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.resource.params.Filter; import com.cloudconvert.resource.params.Include; import com.cloudconvert.resource.params.Pagination; @@ -65,7 +67,7 @@ public AbstractJobsResource( */ public abstract JRAR create( @NotNull final Map tasks - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a job with one ore more tasks. Requires the task.write scope. @@ -84,7 +86,7 @@ public abstract JRAR create( */ public abstract JRAR create( @NotNull final Map tasks, @NotNull final String tag - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getCreateHttpUriRequest( @NotNull final Map tasks, @NotNull final String tag @@ -110,7 +112,7 @@ protected HttpUriRequest getCreateHttpUriRequest( */ public abstract JRAR show( @NotNull final String jobId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getShowHttpUriRequest( @NotNull final String jobId @@ -137,12 +139,12 @@ protected HttpUriRequest getShowHttpUriRequest( */ public abstract JRAR wait( @NotNull final String jobId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getWaitHttpUriRequest( @NotNull final String jobId ) throws URISyntaxException { - final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_JOBS, jobId, PATH_SEGMENT_WAIT)); + final URI uri = getSyncUri(ImmutableList.of(PATH_SEGMENT_JOBS, jobId)); return getHttpUriRequest(HttpGet.class, uri); } @@ -154,7 +156,7 @@ protected HttpUriRequest getWaitHttpUriRequest( * @throws IOException * @throws URISyntaxException */ - public abstract JRPAR list() throws IOException, URISyntaxException; + public abstract JRPAR list() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all jobs. Requires the task.read scope. @@ -168,7 +170,7 @@ protected HttpUriRequest getWaitHttpUriRequest( */ public abstract JRPAR list( @NotNull final Map filters - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all jobs. Requires the task.read scope. @@ -183,7 +185,7 @@ public abstract JRPAR list( */ public abstract JRPAR list( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all jobs. Requires the task.read scope. @@ -201,7 +203,7 @@ public abstract JRPAR list( */ public abstract JRPAR list( @NotNull final Map filters, @NotNull final List includes, @Nullable final Pagination pagination - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getListHttpUriRequest( @NotNull final Map filters, @NotNull final List includes, @Nullable final Pagination pagination @@ -225,7 +227,7 @@ protected HttpUriRequest getListHttpUriRequest( */ public abstract VAR delete( @NotNull final String jobId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getDeleteHttpUriRequest( @NotNull final String jobId diff --git a/src/main/java/com/cloudconvert/resource/AbstractMergeFilesResource.java b/src/main/java/com/cloudconvert/resource/AbstractMergeFilesResource.java index 5eb268b..51b44eb 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractMergeFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractMergeFilesResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.MergeFilesTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.google.common.collect.ImmutableList; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; @@ -35,7 +37,7 @@ public AbstractMergeFilesResource( */ public abstract TRAR merge( @NotNull final MergeFilesTaskRequest mergeFilesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getMergeHttpUriRequest( @NotNull final MergeFilesTaskRequest mergeFilesTaskRequest diff --git a/src/main/java/com/cloudconvert/resource/AbstractOptimizeFilesResource.java b/src/main/java/com/cloudconvert/resource/AbstractOptimizeFilesResource.java index 5cbe64e..dbe5bf0 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractOptimizeFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractOptimizeFilesResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.google.common.collect.ImmutableList; import org.apache.http.HttpEntity; import org.apache.http.client.methods.HttpPost; @@ -35,7 +37,7 @@ public AbstractOptimizeFilesResource( */ public abstract TRAR optimize( @NotNull final OptimizeFilesTaskRequest optimizeFilesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getOptimizeHttpUriRequest( @NotNull final OptimizeFilesTaskRequest optimizeFilesTaskRequest diff --git a/src/main/java/com/cloudconvert/resource/AbstractResource.java b/src/main/java/com/cloudconvert/resource/AbstractResource.java index 291ed25..827923f 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractResource.java @@ -105,6 +105,20 @@ protected URI getUri( return new URIBuilder(settingsProvider.getApiUrl()).setPathSegments(v2PathSegments).setParameters(nameValuePairs).build(); } + protected URI getSyncUri( + final List pathSegments + ) throws URISyntaxException { + return getSyncUri(pathSegments, ImmutableList.of()); + } + + protected URI getSyncUri( + final List pathSegments, final List nameValuePairs + ) throws URISyntaxException { + final List v2PathSegments = ImmutableList.builder().add(V2).addAll(pathSegments).build(); + + return new URIBuilder(settingsProvider.getSyncApiUrl()).setPathSegments(v2PathSegments).setParameters(nameValuePairs).build(); + } + protected HttpEntity getHttpEntity( final Request request ) throws JsonProcessingException { @@ -117,6 +131,10 @@ protected HttpEntity getHttpEntity( return new ByteArrayEntity(objectMapperProvider.provide().writeValueAsBytes(map), ContentType.APPLICATION_JSON); } + protected String getJson(final Map map) throws JsonProcessingException { + return objectMapperProvider.provide().writeValueAsString(map); + } + protected HttpUriRequest getHttpUriRequest( final Class httpRequestBaseClass, final URI uri ) { diff --git a/src/main/java/com/cloudconvert/resource/AbstractSignedUrlResource.java b/src/main/java/com/cloudconvert/resource/AbstractSignedUrlResource.java new file mode 100644 index 0000000..b333f25 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/AbstractSignedUrlResource.java @@ -0,0 +1,72 @@ +package com.cloudconvert.resource; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.TaskRequest; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.collect.ImmutableMap; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.binary.Hex; +import org.jetbrains.annotations.NotNull; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Map; + + +public abstract class AbstractSignedUrlResource extends AbstractResource { + + public static final String HMAC_SHA256 = "HmacSHA256"; + + + public AbstractSignedUrlResource( + final SettingsProvider settingsProvider, final ObjectMapperProvider objectMapperProvider + ) { + super(settingsProvider, objectMapperProvider); + + + } + + + public String sign( + @NotNull final String base, + @NotNull final String signingSecret, + @NotNull final Map tasks, + String cacheKey + ) throws InvalidKeyException, NoSuchAlgorithmException, JsonProcessingException { + + String url = base; + + String jobJson = getJson(ImmutableMap.of("tasks", tasks)); + + String base64Job = Base64.encodeBase64URLSafeString(jobJson.getBytes(StandardCharsets.UTF_8)); + + url = url.concat("?job=").concat(base64Job); + + if (cacheKey != null) { + url = url.concat("&cache_key=").concat(cacheKey); + } + + final Mac mac = Mac.getInstance(HMAC_SHA256); + final SecretKeySpec secretKeySpec = new SecretKeySpec(signingSecret.getBytes(), HMAC_SHA256); + mac.init(secretKeySpec); + + url = url.concat("&s=").concat(Hex.encodeHexString(mac.doFinal(url.getBytes()))); + + return url; + } + + + public String sign( + @NotNull final String base, + @NotNull final String signingSecret, + @NotNull final Map tasks + ) throws InvalidKeyException, NoSuchAlgorithmException, JsonProcessingException { + return this.sign(base, signingSecret, tasks, null); + } + +} diff --git a/src/main/java/com/cloudconvert/resource/AbstractTasksResource.java b/src/main/java/com/cloudconvert/resource/AbstractTasksResource.java index dd63a4c..b76713a 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractTasksResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractTasksResource.java @@ -2,16 +2,13 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; -import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; -import com.cloudconvert.dto.request.ConvertFilesTaskRequest; -import com.cloudconvert.dto.request.CreateArchivesTaskRequest; -import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; -import com.cloudconvert.dto.request.MergeFilesTaskRequest; -import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; +import com.cloudconvert.dto.request.*; import com.cloudconvert.dto.response.OperationResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.resource.params.Filter; import com.cloudconvert.resource.params.Include; import com.cloudconvert.resource.params.Pagination; @@ -63,6 +60,18 @@ public abstract class AbstractTasksResource abstractExecuteCommandsResource; + @Getter + private final AbstractCreateThumbnailsResource abstractCreateThumbnailsResource; + + @Getter + private final AbstractGetMetadataResource abstractGetMetadataResource; + + @Getter + private final AbstractWriteMetadataResource abstractWriteMetadataResource; + + @Getter + private final AbstractAddWatermarkResource abstractAddWatermarkResource; + private final IncludesToNameValuePairsConverter includesToNameValuePairsConverter; private final FiltersToNameValuePairsConverter filtersToNameValuePairsConverter; private final AlternativeToNameValuePairsConverter alternativeToNameValuePairsConverter; @@ -72,7 +81,9 @@ public AbstractTasksResource( final SettingsProvider settingsProvider, final ObjectMapperProvider objectMapperProvider, final AbstractConvertFilesResource abstractConvertFilesResource, final AbstractOptimizeFilesResource abstractOptimizeFilesResource, final AbstractCaptureWebsitesResource abstractCaptureWebsitesResource, final AbstractMergeFilesResource abstractMergeFilesResource, - final AbstractCreateArchivesResource abstractCreateArchivesResource, final AbstractExecuteCommandsResource abstractExecuteCommandsResource + final AbstractCreateArchivesResource abstractCreateArchivesResource, final AbstractExecuteCommandsResource abstractExecuteCommandsResource, + final AbstractCreateThumbnailsResource abstractCreateThumbnailsResource, final AbstractGetMetadataResource abstractGetMetadataResourceResource, + final AbstractWriteMetadataResource abstractWriteMetadataResourceResource, final AbstractAddWatermarkResource abstractAddWatermarkResource ) { super(settingsProvider, objectMapperProvider); @@ -82,6 +93,10 @@ public AbstractTasksResource( this.abstractMergeFilesResource = abstractMergeFilesResource; this.abstractCreateArchivesResource = abstractCreateArchivesResource; this.abstractExecuteCommandsResource = abstractExecuteCommandsResource; + this.abstractCreateThumbnailsResource = abstractCreateThumbnailsResource; + this.abstractGetMetadataResource = abstractGetMetadataResourceResource; + this.abstractWriteMetadataResource = abstractWriteMetadataResourceResource; + this.abstractAddWatermarkResource = abstractAddWatermarkResource; this.includesToNameValuePairsConverter = new IncludesToNameValuePairsConverter(); this.filtersToNameValuePairsConverter = new FiltersToNameValuePairsConverter(); @@ -99,7 +114,7 @@ public AbstractTasksResource( */ public abstract TRAR show( @NotNull final String taskId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Show a task. Requires the task.read scope. @@ -112,7 +127,7 @@ public abstract TRAR show( */ public abstract TRAR show( @NotNull final String taskId, @NotNull final List includes - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getShowHttpUriRequest( @NotNull final String taskId, @NotNull final List includes @@ -140,12 +155,12 @@ protected HttpUriRequest getShowHttpUriRequest( */ public abstract TRAR wait( @NotNull final String taskId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getWaitHttpUriRequest( @NotNull final String taskId ) throws URISyntaxException { - final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_TASKS, taskId, PATH_SEGMENT_WAIT)); + final URI uri = getSyncUri(ImmutableList.of(PATH_SEGMENT_TASKS, taskId)); return getHttpUriRequest(HttpGet.class, uri); } @@ -157,7 +172,7 @@ protected HttpUriRequest getWaitHttpUriRequest( * @throws IOException * @throws URISyntaxException */ - public abstract TRPAR list() throws IOException, URISyntaxException; + public abstract TRPAR list() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all tasks with their status, payload and result. Requires the task.read scope. @@ -172,7 +187,7 @@ protected HttpUriRequest getWaitHttpUriRequest( */ public abstract TRPAR list( @NotNull final Map filters - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all tasks with their status, payload and result. Requires the task.read scope. @@ -188,7 +203,7 @@ public abstract TRPAR list( */ public abstract TRPAR list( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all tasks with their status, payload and result. Requires the task.read scope. @@ -207,7 +222,7 @@ public abstract TRPAR list( */ public abstract TRPAR list( @NotNull final Map filters, @NotNull final List includes, @Nullable final Pagination pagination - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getListHttpUriRequest( @NotNull final Map filters, @NotNull final List includes, @Nullable final Pagination pagination @@ -230,7 +245,7 @@ protected HttpUriRequest getListHttpUriRequest( */ public abstract TRAR cancel( @NotNull final String taskId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getCancelHttpUriRequest( @NotNull final String taskId @@ -250,7 +265,7 @@ protected HttpUriRequest getCancelHttpUriRequest( */ public abstract TRAR retry( @NotNull final String taskId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getRetryHttpUriRequest( @NotNull final String taskId @@ -271,7 +286,7 @@ protected HttpUriRequest getRetryHttpUriRequest( */ public abstract VAR delete( @NotNull final String taskId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getDeleteHttpUriRequest( @NotNull final String taskId @@ -288,7 +303,7 @@ protected HttpUriRequest getDeleteHttpUriRequest( * @throws IOException * @throws URISyntaxException */ - public abstract ORPAR operations() throws IOException, URISyntaxException; + public abstract ORPAR operations() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all possible operations, formats, engines and possible options. @@ -305,7 +320,7 @@ protected HttpUriRequest getDeleteHttpUriRequest( */ public abstract ORPAR operations( @NotNull final Map filters - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all possible operations, formats, engines and possible options. @@ -323,7 +338,7 @@ public abstract ORPAR operations( */ public abstract ORPAR operations( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all possible operations, formats, engines and possible options. @@ -343,7 +358,7 @@ public abstract ORPAR operations( */ public abstract ORPAR operations( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getOperationsHttpUriRequest( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative @@ -366,7 +381,7 @@ protected HttpUriRequest getOperationsHttpUriRequest( */ public abstract TRAR convert( @NotNull final ConvertFilesTaskRequest convertFilesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all supported formats, their engines and possible options. @@ -375,7 +390,7 @@ public abstract TRAR convert( * @throws IOException * @throws URISyntaxException */ - public abstract ORPAR convertFormats() throws IOException, URISyntaxException; + public abstract ORPAR convertFormats() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all supported formats, their engines and possible options. @@ -391,7 +406,7 @@ public abstract TRAR convert( */ public abstract ORPAR convertFormats( @NotNull final Map filters - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all supported formats, their engines and possible options. @@ -408,7 +423,7 @@ public abstract ORPAR convertFormats( */ public abstract ORPAR convertFormats( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all supported formats, their engines and possible options. @@ -427,7 +442,7 @@ public abstract ORPAR convertFormats( */ public abstract ORPAR convertFormats( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a task to optimize and compress a file. Currently supported formats are PDF, PNG and JPG. @@ -439,7 +454,7 @@ public abstract ORPAR convertFormats( */ public abstract TRAR optimize( @NotNull final OptimizeFilesTaskRequest optimizeFilesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a task to convert a website to PDF or to capture a screenshot of a website (png, jpg). @@ -451,7 +466,7 @@ public abstract TRAR optimize( */ public abstract TRAR capture( @NotNull final CaptureWebsitesTaskRequest captureWebsitesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a task to merge at least two files to one PDF. If input files are not PDFs yet, they are automatically converted to PDF. @@ -463,7 +478,7 @@ public abstract TRAR capture( */ public abstract TRAR merge( @NotNull final MergeFilesTaskRequest mergeFilesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a task to create a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive. @@ -475,7 +490,7 @@ public abstract TRAR merge( */ public abstract TRAR archive( @NotNull final CreateArchivesTaskRequest createArchivesTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * Create a task to execute a command. Currently, ffmpeg, imagemagick and graphicsmagick commands re supported. @@ -489,7 +504,59 @@ public abstract TRAR archive( */ public abstract TRAR command( @NotNull final ExecuteCommandsTaskRequest executeCommandsTaskRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + /** + * Create a task to create a thumbnail of one file. Requires the task.write scope. + * + * @param createThumbnailsTaskRequest {@link CreateThumbnailsTaskRequest} + * @return {@link TRAR} + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR thumbnail( + @NotNull final CreateThumbnailsTaskRequest createThumbnailsTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + + /** + * Create a task to extract metadata from one file. Requires the task.write scope. + * + * @param getMetadataTaskRequest {@link GetMetadataTaskRequest} + * @return {@link TRAR} + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR metadata( + @NotNull final GetMetadataTaskRequest getMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + + /** + * Create a task to write file metadata. + * + * @param writeMetadataTaskRequest {@link WriteMetadataTaskRequest} + * @return {@link TRAR} + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR writeMetadata( + @NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + + /** + * Create a task to add a watermark to a file. Requires the task.write scope. + * + * @param addWatermarkTaskRequest {@link AddWatermarkTaskRequest} + * @return {@link TRAR} + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR watermark( + @NotNull final AddWatermarkTaskRequest addWatermarkTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + @Override public void close() throws IOException { @@ -499,5 +566,9 @@ public void close() throws IOException { abstractMergeFilesResource.close(); abstractCreateArchivesResource.close(); abstractExecuteCommandsResource.close(); + abstractCreateThumbnailsResource.close(); + abstractGetMetadataResource.close(); + abstractWriteMetadataResource.close(); + abstractAddWatermarkResource.close(); } } diff --git a/src/main/java/com/cloudconvert/resource/AbstractUsersResource.java b/src/main/java/com/cloudconvert/resource/AbstractUsersResource.java index 52921e2..ddbb6c9 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractUsersResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractUsersResource.java @@ -4,6 +4,8 @@ import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.response.UserResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.google.common.collect.ImmutableList; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; @@ -30,7 +32,7 @@ public AbstractUsersResource( * @throws IOException * @throws URISyntaxException */ - public abstract URAR me() throws IOException, URISyntaxException; + public abstract URAR me() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getMeHttpUriRequest() throws URISyntaxException { final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_USERS, PATH_SEGMENT_ME)); diff --git a/src/main/java/com/cloudconvert/resource/AbstractWebhooksResource.java b/src/main/java/com/cloudconvert/resource/AbstractWebhooksResource.java index 4ae4f45..e72cc25 100644 --- a/src/main/java/com/cloudconvert/resource/AbstractWebhooksResource.java +++ b/src/main/java/com/cloudconvert/resource/AbstractWebhooksResource.java @@ -6,6 +6,8 @@ import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.WebhookResponse; import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.resource.params.Filter; import com.cloudconvert.resource.params.Pagination; import com.cloudconvert.resource.params.converter.FiltersToNameValuePairsConverter; @@ -60,7 +62,7 @@ public AbstractWebhooksResource( */ public abstract WRAR create( @NotNull final WebhookRequest webhookRequest - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getCreateHttpUriRequest( @NotNull final WebhookRequest webhookRequest @@ -77,7 +79,7 @@ protected HttpUriRequest getCreateHttpUriRequest( * @throws IOException * @throws URISyntaxException */ - public abstract WRPAR list() throws IOException, URISyntaxException; + public abstract WRPAR list() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all webhooks. Requires the webhook.read scope. @@ -90,7 +92,7 @@ protected HttpUriRequest getCreateHttpUriRequest( */ public abstract WRPAR list( @NotNull final Map filters - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; /** * List all webhooks. Requires the webhook.read scope. @@ -106,7 +108,7 @@ public abstract WRPAR list( */ public abstract WRPAR list( @NotNull final Map filters, @Nullable final Pagination pagination - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getListHttpUriRequest( @NotNull final Map filters, @Nullable final Pagination pagination @@ -131,7 +133,7 @@ protected HttpUriRequest getListHttpUriRequest( */ public abstract VAR delete( @NotNull final String webhookId - ) throws IOException, URISyntaxException; + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; protected HttpUriRequest getDeleteHttpUriRequest( @NotNull final String webhookId diff --git a/src/main/java/com/cloudconvert/resource/AbstractWriteMetadataResource.java b/src/main/java/com/cloudconvert/resource/AbstractWriteMetadataResource.java new file mode 100644 index 0000000..77bd797 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/AbstractWriteMetadataResource.java @@ -0,0 +1,51 @@ +package com.cloudconvert.resource; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.WriteMetadataTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.AbstractResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; +import com.google.common.collect.ImmutableList; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +public abstract class AbstractWriteMetadataResource> extends AbstractResource { + + public static final String PATH_SEGMENT_METADATA = "metadata"; + public static final String PATH_SEGMENT_WRITE = "write"; + + public AbstractWriteMetadataResource( + final SettingsProvider settingsProvider, final ObjectMapperProvider objectMapperProvider + ) { + super(settingsProvider, objectMapperProvider); + } + + /** + * Create a task to write file metadata. + * + * @param writeMetadataTaskRequest {@link WriteMetadataTaskRequest} + * @return {@link TRAR} + * @throws IOException + * @throws URISyntaxException + */ + public abstract TRAR writeMetadata( + @NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException; + + protected HttpUriRequest getWriteMetadataHttpUriRequest( + @NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest + ) throws IOException, URISyntaxException { + final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_METADATA, PATH_SEGMENT_WRITE)); + final HttpEntity httpEntity = getHttpEntity(writeMetadataTaskRequest); + + return getHttpUriRequest(HttpPost.class, uri, httpEntity); + } +} diff --git a/src/main/java/com/cloudconvert/resource/async/AsyncAddWatermarkResource.java b/src/main/java/com/cloudconvert/resource/async/AsyncAddWatermarkResource.java new file mode 100644 index 0000000..4a12598 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/async/AsyncAddWatermarkResource.java @@ -0,0 +1,41 @@ +package com.cloudconvert.resource.async; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.AddWatermarkTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.AsyncResult; +import com.cloudconvert.executor.AsyncRequestExecutor; +import com.cloudconvert.resource.AbstractAddWatermarkResource; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URISyntaxException; + +@Slf4j +public class AsyncAddWatermarkResource extends AbstractAddWatermarkResource> { + + private final AsyncRequestExecutor asyncRequestExecutor; + + public AsyncAddWatermarkResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final AsyncRequestExecutor asyncRequestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.asyncRequestExecutor = asyncRequestExecutor; + } + + @Override + public AsyncResult watermark( + @NotNull final AddWatermarkTaskRequest addWatermarkTaskRequest + ) throws IOException, URISyntaxException { + return asyncRequestExecutor.execute(getWatermarkHttpUriRequest(addWatermarkTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public void close() throws IOException { + asyncRequestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/async/AsyncCreateThumbnailsResource.java b/src/main/java/com/cloudconvert/resource/async/AsyncCreateThumbnailsResource.java new file mode 100644 index 0000000..a5501f6 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/async/AsyncCreateThumbnailsResource.java @@ -0,0 +1,41 @@ +package com.cloudconvert.resource.async; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.CreateThumbnailsTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.AsyncResult; +import com.cloudconvert.executor.AsyncRequestExecutor; +import com.cloudconvert.resource.AbstractCreateThumbnailsResource; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URISyntaxException; + +@Slf4j +public class AsyncCreateThumbnailsResource extends AbstractCreateThumbnailsResource> { + + private final AsyncRequestExecutor asyncRequestExecutor; + + public AsyncCreateThumbnailsResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final AsyncRequestExecutor asyncRequestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.asyncRequestExecutor = asyncRequestExecutor; + } + + @Override + public AsyncResult thumbnail( + @NotNull final CreateThumbnailsTaskRequest createThumbnailsTaskRequest + ) throws IOException, URISyntaxException { + return asyncRequestExecutor.execute(getThumbnailHttpUriRequest(createThumbnailsTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public void close() throws IOException { + asyncRequestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/async/AsyncGetMetadataResource.java b/src/main/java/com/cloudconvert/resource/async/AsyncGetMetadataResource.java new file mode 100644 index 0000000..fcb35cd --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/async/AsyncGetMetadataResource.java @@ -0,0 +1,41 @@ +package com.cloudconvert.resource.async; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.GetMetadataTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.AsyncResult; +import com.cloudconvert.executor.AsyncRequestExecutor; +import com.cloudconvert.resource.AbstractGetMetadataResource; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URISyntaxException; + +@Slf4j +public class AsyncGetMetadataResource extends AbstractGetMetadataResource> { + + private final AsyncRequestExecutor asyncRequestExecutor; + + public AsyncGetMetadataResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final AsyncRequestExecutor asyncRequestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.asyncRequestExecutor = asyncRequestExecutor; + } + + @Override + public AsyncResult metadata( + @NotNull final GetMetadataTaskRequest getMetadataTaskRequest + ) throws IOException, URISyntaxException { + return asyncRequestExecutor.execute(getMetadataHttpUriRequest(getMetadataTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public void close() throws IOException { + asyncRequestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/async/AsyncImportFilesResource.java b/src/main/java/com/cloudconvert/resource/async/AsyncImportFilesResource.java index ae02d48..7472b53 100644 --- a/src/main/java/com/cloudconvert/resource/async/AsyncImportFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/async/AsyncImportFilesResource.java @@ -3,8 +3,10 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.request.AzureBlobImportRequest; +import com.cloudconvert.dto.request.Base64ImportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest; import com.cloudconvert.dto.request.OpenStackImportRequest; +import com.cloudconvert.dto.request.RawImportRequest; import com.cloudconvert.dto.request.S3ImportRequest; import com.cloudconvert.dto.request.SftpImportRequest; import com.cloudconvert.dto.request.UploadImportRequest; @@ -13,6 +15,8 @@ import com.cloudconvert.dto.result.AsyncResult; import com.cloudconvert.dto.result.CompletedAsyncResult; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.AsyncRequestExecutor; import com.cloudconvert.resource.AbstractImportFilesResource; import com.google.common.collect.ImmutableList; @@ -69,24 +73,23 @@ public AsyncResult upload( @Override public AsyncResult upload( @NotNull final UploadImportRequest uploadImportRequest, @NotNull final File file - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return upload(upload(uploadImportRequest), file); } @Override public AsyncResult upload( - @NotNull final AsyncResult TaskResponseAsyncResult, @NotNull final File file - ) throws IOException, URISyntaxException { + @NotNull final AsyncResult taskResponseAsyncResult, @NotNull final File file + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { try { - final Result TaskResponseResult = TaskResponseAsyncResult.get(); + final Result taskResponseResult = taskResponseAsyncResult.get(); - if (HttpStatus.SC_CREATED == TaskResponseResult.getStatus()) { - final TaskResponse taskResponse = TaskResponseResult.getBody(); + if (HttpStatus.SC_CREATED == taskResponseResult.getStatus().getCode()) { + final TaskResponse taskResponse = taskResponseResult.getBody(); return upload(taskResponse.getId(), taskResponse.getResult().getForm(), file); } else { - return CompletedAsyncResult.builder().result(Result.builder() - .status(TaskResponseResult.getStatus()).message(TaskResponseResult.getMessage()).build()).build(); + return CompletedAsyncResult.builder().result(taskResponseResult).build(); } } catch (InterruptedException | ExecutionException e) { throw new IOException(e); @@ -96,12 +99,12 @@ public AsyncResult upload( @Override public AsyncResult upload( @NotNull final String taskId, @NotNull final TaskResponse.Result.Form taskResponseResultForm, @NotNull final File file - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { try { final URI multipartUri = new URI(taskResponseResultForm.getUrl()); final HttpEntity multipartHttpEntity = getMultipartHttpEntity(taskResponseResultForm, file); final HttpUriRequest multipartHttpUriRequest = getHttpUriRequest(HttpPost.class, multipartUri, multipartHttpEntity); - + multipartHttpUriRequest.removeHeaders(HEADER_AUTHORIZATION); return uploadPostProcess(taskId, asyncRequestExecutor.execute(multipartHttpUriRequest, VOID_TYPE_REFERENCE)); } catch (InterruptedException | ExecutionException e) { throw new IOException(e); @@ -111,24 +114,49 @@ public AsyncResult upload( @Override public AsyncResult upload( @NotNull final UploadImportRequest uploadImportRequest, @NotNull final InputStream inputStream - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return upload(upload(uploadImportRequest), inputStream); } @Override public AsyncResult upload( - @NotNull final AsyncResult TaskResponseAsyncResult, @NotNull final InputStream inputStream - ) throws IOException, URISyntaxException { + @NotNull UploadImportRequest uploadImportRequest, @NotNull InputStream inputStream, @NotNull String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return upload(upload(uploadImportRequest), inputStream, filename); + } + + @Override + public AsyncResult upload( + @NotNull final AsyncResult taskResponseAsyncResult, @NotNull final InputStream inputStream + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { try { - final Result TaskResponseResult = TaskResponseAsyncResult.get(); + final Result taskResponseResult = taskResponseAsyncResult.get(); - if (HttpStatus.SC_CREATED == TaskResponseResult.getStatus()) { - final TaskResponse taskResponse = TaskResponseResult.getBody(); + if (HttpStatus.SC_CREATED == taskResponseResult.getStatus().getCode()) { + final TaskResponse taskResponse = taskResponseResult.getBody(); return upload(taskResponse.getId(), taskResponse.getResult().getForm(), inputStream); } else { - return CompletedAsyncResult.builder().result(Result.builder() - .status(TaskResponseResult.getStatus()).message(TaskResponseResult.getMessage()).build()).build(); + return CompletedAsyncResult.builder().result(taskResponseResult).build(); + } + } catch (InterruptedException | ExecutionException e) { + throw new IOException(e); + } + } + + @Override + public AsyncResult upload( + @NotNull AsyncResult taskResponseAsyncResult, @NotNull InputStream inputStream, @NotNull String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + try { + final Result taskResponseResult = taskResponseAsyncResult.get(); + + if (HttpStatus.SC_CREATED == taskResponseResult.getStatus().getCode()) { + final TaskResponse taskResponse = taskResponseResult.getBody(); + + return upload(taskResponse.getId(), taskResponse.getResult().getForm(), inputStream, filename); + } else { + return CompletedAsyncResult.builder().result(taskResponseResult).build(); } } catch (InterruptedException | ExecutionException e) { throw new IOException(e); @@ -138,12 +166,27 @@ public AsyncResult upload( @Override public AsyncResult upload( @NotNull final String taskId, @NotNull final TaskResponse.Result.Form taskResponseResultForm, @NotNull final InputStream inputStream - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { try { final URI multipartUri = new URI(taskResponseResultForm.getUrl()); final HttpEntity multipartHttpEntity = getMultipartHttpEntity(taskResponseResultForm, inputStream); final HttpUriRequest multipartHttpUriRequest = getHttpUriRequest(HttpPost.class, multipartUri, multipartHttpEntity); + multipartHttpUriRequest.removeHeaders(HEADER_AUTHORIZATION); + return uploadPostProcess(taskId, asyncRequestExecutor.execute(multipartHttpUriRequest, VOID_TYPE_REFERENCE)); + } catch (InterruptedException | ExecutionException e) { + throw new IOException(e); + } + } + @Override + public AsyncResult upload( + @NotNull String taskId, TaskResponse.Result.@NotNull Form taskResponseResultForm, @NotNull InputStream inputStream, @NotNull String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + try { + final URI multipartUri = new URI(taskResponseResultForm.getUrl()); + final HttpEntity multipartHttpEntity = getMultipartHttpEntity(taskResponseResultForm, filename, inputStream); + final HttpUriRequest multipartHttpUriRequest = getHttpUriRequest(HttpPost.class, multipartUri, multipartHttpEntity); + multipartHttpUriRequest.removeHeaders(HEADER_AUTHORIZATION); return uploadPostProcess(taskId, asyncRequestExecutor.execute(multipartHttpUriRequest, VOID_TYPE_REFERENCE)); } catch (InterruptedException | ExecutionException e) { throw new IOException(e); @@ -152,27 +195,27 @@ public AsyncResult upload( private AsyncResult uploadPostProcess( final String taskId, final AsyncResult multipartVoidAsyncResult - ) throws IOException, URISyntaxException, InterruptedException, ExecutionException { + ) throws IOException, URISyntaxException, InterruptedException, ExecutionException, CloudConvertClientException, CloudConvertServerException { final Result multipartVoidResult = multipartVoidAsyncResult.get(); - if (HttpStatus.SC_CREATED == multipartVoidResult.getStatus()) { + if (HttpStatus.SC_CREATED == multipartVoidResult.getStatus().getCode()) { return asyncTasksResource.show(taskId); - } else if (HttpStatus.SC_SEE_OTHER == multipartVoidResult.getStatus()) { + } else if (HttpStatus.SC_SEE_OTHER == multipartVoidResult.getStatus().getCode()) { final URI redirectUri = new URI(multipartVoidResult.getHeaders().get("Location")); final HttpUriRequest redirectHttpUriRequest = getHttpUriRequest(HttpGet.class, redirectUri); final AsyncResult redirectVoidAsyncResult = asyncRequestExecutor.execute(redirectHttpUriRequest, VOID_TYPE_REFERENCE); final Result redirectVoidResult = redirectVoidAsyncResult.get(); - if (HttpStatus.SC_CREATED == redirectVoidResult.getStatus()) { + if (HttpStatus.SC_CREATED == redirectVoidResult.getStatus().getCode()) { return asyncTasksResource.show(taskId); } else { - return CompletedAsyncResult.builder().result(Result.builder() - .status(redirectVoidResult.getStatus()).message(redirectVoidResult.getMessage()).build()).build(); + return CompletedAsyncResult.builder() + .result(Result.builder().status(redirectVoidResult.getStatus()).headers(redirectVoidResult.getHeaders()).build()).build(); } } else { - return CompletedAsyncResult.builder().result(Result.builder() - .status(multipartVoidResult.getStatus()).message(multipartVoidResult.getMessage()).build()).build(); + return CompletedAsyncResult.builder() + .result(Result.builder().status(multipartVoidResult.getStatus()).headers(multipartVoidResult.getHeaders()).build()).build(); } } @@ -211,6 +254,16 @@ public AsyncResult sftp( return asyncRequestExecutor.execute(getSftpHttpUriRequest(sftpImportRequest), TASK_RESPONSE_TYPE_REFERENCE); } + @Override + public AsyncResult base64(@NotNull final Base64ImportRequest base64ImportRequest) throws IOException, URISyntaxException { + return asyncRequestExecutor.execute(getBase64HttpUriRequest(base64ImportRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public AsyncResult raw(@NotNull final RawImportRequest rawImportRequest) throws IOException, URISyntaxException { + return asyncRequestExecutor.execute(getRawHttpUriRequest(rawImportRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + @Override public void close() throws IOException { asyncRequestExecutor.close(); diff --git a/src/main/java/com/cloudconvert/resource/async/AsyncSignedUrlResource.java b/src/main/java/com/cloudconvert/resource/async/AsyncSignedUrlResource.java new file mode 100644 index 0000000..a7a80c0 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/async/AsyncSignedUrlResource.java @@ -0,0 +1,29 @@ +package com.cloudconvert.resource.async; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.executor.AsyncRequestExecutor; +import com.cloudconvert.resource.AbstractSignedUrlResource; + + +import java.io.IOException; + + +public class AsyncSignedUrlResource extends AbstractSignedUrlResource { + + private final AsyncRequestExecutor asyncRequestExecutor; + + public AsyncSignedUrlResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final AsyncRequestExecutor asyncRequestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.asyncRequestExecutor = asyncRequestExecutor; + } + + @Override + public void close() throws IOException { + asyncRequestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/async/AsyncTasksResource.java b/src/main/java/com/cloudconvert/resource/async/AsyncTasksResource.java index 4281342..8b4ea1d 100644 --- a/src/main/java/com/cloudconvert/resource/async/AsyncTasksResource.java +++ b/src/main/java/com/cloudconvert/resource/async/AsyncTasksResource.java @@ -2,16 +2,13 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; -import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; -import com.cloudconvert.dto.request.ConvertFilesTaskRequest; -import com.cloudconvert.dto.request.CreateArchivesTaskRequest; -import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; -import com.cloudconvert.dto.request.MergeFilesTaskRequest; -import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; +import com.cloudconvert.dto.request.*; import com.cloudconvert.dto.response.OperationResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.AsyncResult; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.AsyncRequestExecutor; import com.cloudconvert.resource.AbstractTasksResource; import com.cloudconvert.resource.params.Filter; @@ -38,10 +35,12 @@ public AsyncTasksResource( final SettingsProvider settingsProvider, final ObjectMapperProvider objectMapperProvider, final AsyncRequestExecutor asyncRequestExecutor, final AsyncConvertFilesResource asyncConvertFilesResource, final AsyncOptimizeFilesResource asyncOptimizeFilesResource, final AsyncCaptureWebsitesResource asyncCaptureWebsitesResource, final AsyncMergeFilesResource asyncMergeFilesResource, - final AsyncCreateArchivesResource asyncCreateArchivesResource, final AsyncExecuteCommandsResource asyncExecuteCommandsResource + final AsyncCreateArchivesResource asyncCreateArchivesResource, final AsyncExecuteCommandsResource asyncExecuteCommandsResource, + final AsyncCreateThumbnailsResource asyncCreateThumbnailsResource, final AsyncGetMetadataResource asyncGetMetadataResource, + final AsyncWriteMetadataResource asyncWriteMetadataResource, final AsyncAddWatermarkResource asyncAddWatermarkResource ) { super(settingsProvider, objectMapperProvider, asyncConvertFilesResource, asyncOptimizeFilesResource, asyncCaptureWebsitesResource, - asyncMergeFilesResource, asyncCreateArchivesResource, asyncExecuteCommandsResource); + asyncMergeFilesResource, asyncCreateArchivesResource, asyncExecuteCommandsResource, asyncCreateThumbnailsResource, asyncGetMetadataResource, asyncWriteMetadataResource, asyncAddWatermarkResource); this.asyncRequestExecutor = asyncRequestExecutor; } @@ -131,71 +130,99 @@ public AsyncResult> operations( @Override public AsyncResult convert( @NotNull final ConvertFilesTaskRequest convertFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convert(convertFilesTaskRequest); } @Override - public AsyncResult> convertFormats() throws IOException, URISyntaxException { + public AsyncResult> convertFormats() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convertFormats(); } @Override public AsyncResult> convertFormats( @NotNull final Map filters - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convertFormats(filters); } @Override public AsyncResult> convertFormats( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convertFormats(filters, includes); } @Override public AsyncResult> convertFormats( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convertFormats(filters, includes, alternative); } @Override public AsyncResult optimize( @NotNull final OptimizeFilesTaskRequest optimizeFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractOptimizeFilesResource().optimize(optimizeFilesTaskRequest); } @Override public AsyncResult capture( @NotNull final CaptureWebsitesTaskRequest captureWebsitesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractCaptureWebsitesResource().capture(captureWebsitesTaskRequest); } @Override public AsyncResult merge( @NotNull final MergeFilesTaskRequest mergeFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractMergeFilesResource().merge(mergeFilesTaskRequest); } @Override public AsyncResult archive( @NotNull final CreateArchivesTaskRequest createArchivesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractCreateArchivesResource().archive(createArchivesTaskRequest); } @Override public AsyncResult command( @NotNull final ExecuteCommandsTaskRequest executeCommandsTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractExecuteCommandsResource().command(executeCommandsTaskRequest); } + @Override + public AsyncResult thumbnail( + @NotNull final CreateThumbnailsTaskRequest createThumbnailsTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return getAbstractCreateThumbnailsResource().thumbnail(createThumbnailsTaskRequest); + } + + @Override + public AsyncResult metadata( + @NotNull final GetMetadataTaskRequest getMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return getAbstractGetMetadataResource().metadata(getMetadataTaskRequest); + } + + @Override + public AsyncResult writeMetadata( + @NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return getAbstractWriteMetadataResource().writeMetadata(writeMetadataTaskRequest); + } + + @Override + public AsyncResult watermark( + @NotNull final AddWatermarkTaskRequest addWatermarkTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return getAbstractAddWatermarkResource().watermark(addWatermarkTaskRequest); + } + @Override public void close() throws IOException { asyncRequestExecutor.close(); diff --git a/src/main/java/com/cloudconvert/resource/async/AsyncWriteMetadataResource.java b/src/main/java/com/cloudconvert/resource/async/AsyncWriteMetadataResource.java new file mode 100644 index 0000000..75e482e --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/async/AsyncWriteMetadataResource.java @@ -0,0 +1,41 @@ +package com.cloudconvert.resource.async; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.WriteMetadataTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.AsyncResult; +import com.cloudconvert.executor.AsyncRequestExecutor; +import com.cloudconvert.resource.AbstractWriteMetadataResource; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URISyntaxException; + +@Slf4j +public class AsyncWriteMetadataResource extends AbstractWriteMetadataResource> { + + private final AsyncRequestExecutor asyncRequestExecutor; + + public AsyncWriteMetadataResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final AsyncRequestExecutor asyncRequestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.asyncRequestExecutor = asyncRequestExecutor; + } + + @Override + public AsyncResult writeMetadata( + @NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest + ) throws IOException, URISyntaxException { + return asyncRequestExecutor.execute(getWriteMetadataHttpUriRequest(writeMetadataTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public void close() throws IOException { + asyncRequestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/sync/AddWatermarkResource.java b/src/main/java/com/cloudconvert/resource/sync/AddWatermarkResource.java new file mode 100644 index 0000000..9b0b136 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/sync/AddWatermarkResource.java @@ -0,0 +1,43 @@ +package com.cloudconvert.resource.sync; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.AddWatermarkTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; +import com.cloudconvert.executor.RequestExecutor; +import com.cloudconvert.resource.AbstractAddWatermarkResource; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URISyntaxException; + +@Slf4j +public class AddWatermarkResource extends AbstractAddWatermarkResource> { + + private final RequestExecutor requestExecutor; + + public AddWatermarkResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final RequestExecutor requestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.requestExecutor = requestExecutor; + } + + @Override + public Result watermark( + @NotNull final AddWatermarkTaskRequest createWatermarkTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return requestExecutor.execute(getWatermarkHttpUriRequest(createWatermarkTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public void close() throws IOException { + requestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/sync/CaptureWebsitesResource.java b/src/main/java/com/cloudconvert/resource/sync/CaptureWebsitesResource.java index 9ab648f..e503e21 100644 --- a/src/main/java/com/cloudconvert/resource/sync/CaptureWebsitesResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/CaptureWebsitesResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractCaptureWebsitesResource; import lombok.extern.slf4j.Slf4j; @@ -30,7 +32,7 @@ public CaptureWebsitesResource( @Override public Result capture( @NotNull final CaptureWebsitesTaskRequest captureWebsitesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getCaptureHttpUriRequest(captureWebsitesTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/ConvertFilesResource.java b/src/main/java/com/cloudconvert/resource/sync/ConvertFilesResource.java index e59b789..04e00ec 100644 --- a/src/main/java/com/cloudconvert/resource/sync/ConvertFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/ConvertFilesResource.java @@ -7,6 +7,8 @@ import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractConvertFilesResource; import com.cloudconvert.resource.params.Filter; @@ -40,33 +42,33 @@ public ConvertFilesResource( @Override public Result convert( @NotNull final ConvertFilesTaskRequest convertFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getConvertHttpUriRequest(convertFilesTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override - public Result> convertFormats() throws IOException, URISyntaxException { + public Result> convertFormats() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return convertFormats(ImmutableMap.of()); } @Override public Result> convertFormats( @NotNull final Map filters - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return convertFormats(filters, ImmutableList.of()); } @Override public Result> convertFormats( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return convertFormats(filters, includes, null); } @Override public Result> convertFormats( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getConvertFormatsHttpUriRequest(filters, includes, alternative), OPERATION_RESPONSE_PAGEABLE_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/CreateArchivesResource.java b/src/main/java/com/cloudconvert/resource/sync/CreateArchivesResource.java index 8e6f871..655a857 100644 --- a/src/main/java/com/cloudconvert/resource/sync/CreateArchivesResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/CreateArchivesResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.CreateArchivesTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractCreateArchivesResource; import lombok.extern.slf4j.Slf4j; @@ -30,7 +32,7 @@ public CreateArchivesResource( @Override public Result archive( @NotNull final CreateArchivesTaskRequest createArchivesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getArchiveHttpUriRequest(createArchivesTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/CreateThumbnailsResource.java b/src/main/java/com/cloudconvert/resource/sync/CreateThumbnailsResource.java new file mode 100644 index 0000000..da55e5e --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/sync/CreateThumbnailsResource.java @@ -0,0 +1,43 @@ +package com.cloudconvert.resource.sync; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.CreateThumbnailsTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; +import com.cloudconvert.executor.RequestExecutor; +import com.cloudconvert.resource.AbstractCreateThumbnailsResource; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URISyntaxException; + +@Slf4j +public class CreateThumbnailsResource extends AbstractCreateThumbnailsResource> { + + private final RequestExecutor requestExecutor; + + public CreateThumbnailsResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final RequestExecutor requestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.requestExecutor = requestExecutor; + } + + @Override + public Result thumbnail( + @NotNull final CreateThumbnailsTaskRequest createThumbnailsTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return requestExecutor.execute(getThumbnailHttpUriRequest(createThumbnailsTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public void close() throws IOException { + requestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/sync/ExecuteCommandsResource.java b/src/main/java/com/cloudconvert/resource/sync/ExecuteCommandsResource.java index 4fb54bb..af40850 100644 --- a/src/main/java/com/cloudconvert/resource/sync/ExecuteCommandsResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/ExecuteCommandsResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractExecuteCommandsResource; import com.google.common.collect.ImmutableList; @@ -34,7 +36,7 @@ public ExecuteCommandsResource( @Override public Result command( @NotNull final ExecuteCommandsTaskRequest executeCommandsTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getCommandHttpUriRequest(executeCommandsTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/ExportFilesResource.java b/src/main/java/com/cloudconvert/resource/sync/ExportFilesResource.java index f244033..b43fad2 100644 --- a/src/main/java/com/cloudconvert/resource/sync/ExportFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/ExportFilesResource.java @@ -10,6 +10,8 @@ import com.cloudconvert.dto.request.UrlExportRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractExportFilesResource; import lombok.extern.slf4j.Slf4j; @@ -35,42 +37,42 @@ public ExportFilesResource( @Override public Result url( @NotNull final UrlExportRequest urlExportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getUrlHttpUriRequest(urlExportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result s3( @NotNull final S3ExportRequest s3ExportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getS3HttpUriRequest(s3ExportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result azureBlob( @NotNull final AzureBlobExportRequest azureBlobExportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getAzureBlobHttpUriRequest(azureBlobExportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result googleCloudStorage( @NotNull final GoogleCloudStorageExportRequest googleCloudStorageExportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getGoogleCloudStorageHttpUriRequest(googleCloudStorageExportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result openStack( @NotNull final OpenStackExportRequest openStackExportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getOpenStackStorageHttpUriRequest(openStackExportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result sftp( @NotNull final SftpExportRequest sftpExportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getSftpStorageHttpUriRequest(sftpExportRequest), TASK_RESPONSE_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/FilesResource.java b/src/main/java/com/cloudconvert/resource/sync/FilesResource.java index d8c1e6b..8b90218 100644 --- a/src/main/java/com/cloudconvert/resource/sync/FilesResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/FilesResource.java @@ -3,6 +3,8 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractFilesResource; import lombok.extern.slf4j.Slf4j; @@ -29,7 +31,7 @@ public FilesResource( @Override public Result download( @NotNull final String path - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getDownloadHttpUriRequest(path), INPUT_STREAM_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/GetMetadataResource.java b/src/main/java/com/cloudconvert/resource/sync/GetMetadataResource.java new file mode 100644 index 0000000..2b1c82d --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/sync/GetMetadataResource.java @@ -0,0 +1,43 @@ +package com.cloudconvert.resource.sync; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.GetMetadataTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; +import com.cloudconvert.executor.RequestExecutor; +import com.cloudconvert.resource.AbstractGetMetadataResource; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URISyntaxException; + +@Slf4j +public class GetMetadataResource extends AbstractGetMetadataResource> { + + private final RequestExecutor requestExecutor; + + public GetMetadataResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final RequestExecutor requestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.requestExecutor = requestExecutor; + } + + @Override + public Result metadata( + @NotNull final GetMetadataTaskRequest getMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return requestExecutor.execute(getMetadataHttpUriRequest(getMetadataTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public void close() throws IOException { + requestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/sync/ImportFilesResource.java b/src/main/java/com/cloudconvert/resource/sync/ImportFilesResource.java index f8fcef6..05416fc 100644 --- a/src/main/java/com/cloudconvert/resource/sync/ImportFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/ImportFilesResource.java @@ -3,14 +3,18 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.request.AzureBlobImportRequest; +import com.cloudconvert.dto.request.Base64ImportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest; import com.cloudconvert.dto.request.OpenStackImportRequest; +import com.cloudconvert.dto.request.RawImportRequest; import com.cloudconvert.dto.request.S3ImportRequest; import com.cloudconvert.dto.request.SftpImportRequest; import com.cloudconvert.dto.request.UploadImportRequest; import com.cloudconvert.dto.request.UrlImportRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractImportFilesResource; import com.google.common.collect.ImmutableList; @@ -48,14 +52,14 @@ public ImportFilesResource( @Override public Result url( @NotNull final UrlImportRequest urlImportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getUrlHttpUriRequest(urlImportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result upload( @NotNull final UploadImportRequest uploadImportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_UPLOAD)); final HttpEntity httpEntity = getHttpEntity(uploadImportRequest); final HttpUriRequest httpUriRequest = getHttpUriRequest(HttpPost.class, uri, httpEntity); @@ -66,122 +70,166 @@ public Result upload( @Override public Result upload( @NotNull final UploadImportRequest uploadImportRequest, @NotNull final File file - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return upload(upload(uploadImportRequest), file); } @Override public Result upload( - @NotNull final Result TaskResponseResult, @NotNull final File file - ) throws IOException, URISyntaxException { - if (HttpStatus.SC_CREATED == TaskResponseResult.getStatus()) { - final TaskResponse taskResponse = TaskResponseResult.getBody(); + @NotNull final Result taskResponseResult, @NotNull final File file + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + if (HttpStatus.SC_CREATED == taskResponseResult.getStatus().getCode()) { + final TaskResponse taskResponse = taskResponseResult.getBody(); return upload(taskResponse.getId(), taskResponse.getResult().getForm(), file); } else { - return Result.builder().status(TaskResponseResult.getStatus()).message(TaskResponseResult.getMessage()).build(); + return taskResponseResult; } } @Override public Result upload( @NotNull final String taskId, @NotNull final TaskResponse.Result.Form taskResponseResultForm, @NotNull final File file - ) throws IOException, URISyntaxException { - + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { final URI multipartUri = new URI(taskResponseResultForm.getUrl()); final HttpEntity multipartHttpEntity = getMultipartHttpEntity(taskResponseResultForm, file); final HttpUriRequest multipartHttpUriRequest = getHttpUriRequest(HttpPost.class, multipartUri, multipartHttpEntity); - + multipartHttpUriRequest.removeHeaders(HEADER_AUTHORIZATION); return uploadPostProcess(taskId, requestExecutor.execute(multipartHttpUriRequest, VOID_TYPE_REFERENCE)); } @Override public Result upload( - @NotNull final UploadImportRequest uploadImportRequest, @NotNull final InputStream inputStream - ) throws IOException, URISyntaxException { + @NotNull UploadImportRequest uploadImportRequest, @NotNull InputStream inputStream + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return upload(upload(uploadImportRequest), inputStream); } @Override public Result upload( - @NotNull final Result TaskResponseResult, @NotNull final InputStream inputStream - ) throws IOException, URISyntaxException { - if (HttpStatus.SC_CREATED == TaskResponseResult.getStatus()) { - final TaskResponse taskResponse = TaskResponseResult.getBody(); + @NotNull final UploadImportRequest uploadImportRequest, @NotNull final InputStream inputStream, @NotNull final String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return upload(upload(uploadImportRequest), inputStream, filename); + } + + @Override + public Result upload( + @NotNull Result taskResponseResult, @NotNull InputStream inputStream + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + if (HttpStatus.SC_CREATED == taskResponseResult.getStatus().getCode()) { + final TaskResponse taskResponse = taskResponseResult.getBody(); return upload(taskResponse.getId(), taskResponse.getResult().getForm(), inputStream); } else { - return Result.builder().status(TaskResponseResult.getStatus()).message(TaskResponseResult.getMessage()).build(); + return taskResponseResult; + } + } + + @Override + public Result upload( + @NotNull final Result taskResponseResult, @NotNull final InputStream inputStream, @NotNull final String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + if (HttpStatus.SC_CREATED == taskResponseResult.getStatus().getCode()) { + final TaskResponse taskResponse = taskResponseResult.getBody(); + + return upload(taskResponse.getId(), taskResponse.getResult().getForm(), inputStream, filename); + } else { + return taskResponseResult; } } @Override public Result upload( - @NotNull final String taskId, @NotNull final TaskResponse.Result.Form taskResponseResultForm, @NotNull final InputStream inputStream - ) throws IOException, URISyntaxException { + @NotNull String taskId, TaskResponse.Result.@NotNull Form taskResponseResultForm, @NotNull InputStream inputStream + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { final URI multipartUri = new URI(taskResponseResultForm.getUrl()); final HttpEntity multipartHttpEntity = getMultipartHttpEntity(taskResponseResultForm, inputStream); final HttpUriRequest multipartHttpUriRequest = getHttpUriRequest(HttpPost.class, multipartUri, multipartHttpEntity); + multipartHttpUriRequest.removeHeaders(HEADER_AUTHORIZATION); + return uploadPostProcess(taskId, requestExecutor.execute(multipartHttpUriRequest, VOID_TYPE_REFERENCE)); + } + @Override + public Result upload( + @NotNull final String taskId, @NotNull final TaskResponse.Result.Form taskResponseResultForm, @NotNull final InputStream inputStream, @NotNull final String filename + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + final URI multipartUri = new URI(taskResponseResultForm.getUrl()); + final HttpEntity multipartHttpEntity = getMultipartHttpEntity(taskResponseResultForm, filename, inputStream); + final HttpUriRequest multipartHttpUriRequest = getHttpUriRequest(HttpPost.class, multipartUri, multipartHttpEntity); + multipartHttpUriRequest.removeHeaders(HEADER_AUTHORIZATION); return uploadPostProcess(taskId, requestExecutor.execute(multipartHttpUriRequest, VOID_TYPE_REFERENCE)); } private Result uploadPostProcess( final String taskId, final Result multipartVoidResult - ) throws IOException, URISyntaxException { - if (HttpStatus.SC_CREATED == multipartVoidResult.getStatus()) { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + if (HttpStatus.SC_CREATED == multipartVoidResult.getStatus().getCode()) { return tasksResource.show(taskId); - } else if (HttpStatus.SC_SEE_OTHER == multipartVoidResult.getStatus()) { + } else if (HttpStatus.SC_SEE_OTHER == multipartVoidResult.getStatus().getCode()) { final URI redirectUri = new URI(multipartVoidResult.getHeaders().get("Location")); final HttpUriRequest redirectHttpUriRequest = getHttpUriRequest(HttpGet.class, redirectUri); final Result redirectVoidResult = requestExecutor.execute(redirectHttpUriRequest, VOID_TYPE_REFERENCE); - if (HttpStatus.SC_CREATED == redirectVoidResult.getStatus()) { + if (HttpStatus.SC_CREATED == redirectVoidResult.getStatus().getCode()) { return tasksResource.show(taskId); } else { - return Result.builder().status(redirectVoidResult.getStatus()).message(redirectVoidResult.getMessage()).build(); + return Result.builder().status(redirectVoidResult.getStatus()).headers(redirectVoidResult.getHeaders()).build(); } } else { - return Result.builder().status(multipartVoidResult.getStatus()).message(multipartVoidResult.getMessage()).build(); + return Result.builder().status(multipartVoidResult.getStatus()).headers(multipartVoidResult.getHeaders()).build(); } } @Override public Result s3( @NotNull final S3ImportRequest s3ImportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getS3HttpUriRequest(s3ImportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result azureBlob( @NotNull final AzureBlobImportRequest azureBlobImportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getAzureBlobHttpUriRequest(azureBlobImportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result googleCloudStorage( @NotNull final GoogleCloudStorageImportRequest googleCloudStorageImportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getGoogleCloudHttpUriRequest(googleCloudStorageImportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result openStack( @NotNull final OpenStackImportRequest openStackImportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getOpenStackHttpUriRequest(openStackImportRequest), TASK_RESPONSE_TYPE_REFERENCE); } @Override public Result sftp( @NotNull final SftpImportRequest sftpImportRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getSftpHttpUriRequest(sftpImportRequest), TASK_RESPONSE_TYPE_REFERENCE); } + @Override + public Result base64( + @NotNull Base64ImportRequest base64ImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return requestExecutor.execute(getBase64HttpUriRequest(base64ImportRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public Result raw( + @NotNull RawImportRequest rawImportRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return requestExecutor.execute(getRawHttpUriRequest(rawImportRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + @Override public void close() throws IOException { requestExecutor.close(); diff --git a/src/main/java/com/cloudconvert/resource/sync/JobsResource.java b/src/main/java/com/cloudconvert/resource/sync/JobsResource.java index 2cbe4f9..5ed889d 100644 --- a/src/main/java/com/cloudconvert/resource/sync/JobsResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/JobsResource.java @@ -6,6 +6,8 @@ import com.cloudconvert.dto.response.JobResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractJobsResource; import com.cloudconvert.resource.params.Filter; @@ -40,61 +42,61 @@ public JobsResource( @Override public Result create( @NotNull final Map tasks - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return create(tasks, ""); } @Override public Result create( @NotNull final Map tasks, @NotNull final String tag - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getCreateHttpUriRequest(tasks, tag), JOB_RESPONSE_TYPE_REFERENCE); } @Override public Result show( @NotNull final String jobId - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getShowHttpUriRequest(jobId), JOB_RESPONSE_TYPE_REFERENCE); } @Override public Result wait( @NotNull final String jobId - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getWaitHttpUriRequest(jobId), JOB_RESPONSE_TYPE_REFERENCE); } @Override - public Result> list() throws IOException, URISyntaxException { + public Result> list() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return list(ImmutableMap.of()); } @Override public Result> list( @NotNull final Map filters - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return list(filters, ImmutableList.of()); } @Override public Result> list( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return list(filters, includes, null); } @Override public Result> list( @NotNull final Map filters, @NotNull final List includes, @Nullable final Pagination pagination - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getListHttpUriRequest(filters, includes, pagination), JOB_RESPONSE_PAGEABLE_TYPE_REFERENCE); } @Override public Result delete( @NotNull final String jobId - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getDeleteHttpUriRequest(jobId), VOID_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/MergeFilesResource.java b/src/main/java/com/cloudconvert/resource/sync/MergeFilesResource.java index 61e55e2..f080226 100644 --- a/src/main/java/com/cloudconvert/resource/sync/MergeFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/MergeFilesResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.MergeFilesTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractMergeFilesResource; import lombok.extern.slf4j.Slf4j; @@ -30,7 +32,7 @@ public MergeFilesResource( @Override public Result merge( @NotNull final MergeFilesTaskRequest mergeFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getMergeHttpUriRequest(mergeFilesTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/OptimizeFilesResource.java b/src/main/java/com/cloudconvert/resource/sync/OptimizeFilesResource.java index 113fb3c..e9ad404 100644 --- a/src/main/java/com/cloudconvert/resource/sync/OptimizeFilesResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/OptimizeFilesResource.java @@ -5,6 +5,8 @@ import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractOptimizeFilesResource; import lombok.extern.slf4j.Slf4j; @@ -30,7 +32,7 @@ public OptimizeFilesResource( @Override public Result optimize( @NotNull final OptimizeFilesTaskRequest optimizeFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getOptimizeHttpUriRequest(optimizeFilesTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/SignedUrlResource.java b/src/main/java/com/cloudconvert/resource/sync/SignedUrlResource.java new file mode 100644 index 0000000..b912634 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/sync/SignedUrlResource.java @@ -0,0 +1,27 @@ +package com.cloudconvert.resource.sync; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.executor.RequestExecutor; +import com.cloudconvert.resource.AbstractSignedUrlResource; + +import java.io.IOException; + +public class SignedUrlResource extends AbstractSignedUrlResource { + + private final RequestExecutor requestExecutor; + + public SignedUrlResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final RequestExecutor requestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.requestExecutor = requestExecutor; + } + + @Override + public void close() throws IOException { + requestExecutor.close(); + } +} diff --git a/src/main/java/com/cloudconvert/resource/sync/TasksResource.java b/src/main/java/com/cloudconvert/resource/sync/TasksResource.java index 0c53218..70855aa 100644 --- a/src/main/java/com/cloudconvert/resource/sync/TasksResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/TasksResource.java @@ -2,16 +2,13 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; -import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; -import com.cloudconvert.dto.request.ConvertFilesTaskRequest; -import com.cloudconvert.dto.request.CreateArchivesTaskRequest; -import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; -import com.cloudconvert.dto.request.MergeFilesTaskRequest; -import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; +import com.cloudconvert.dto.request.*; import com.cloudconvert.dto.response.OperationResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractTasksResource; import com.cloudconvert.resource.params.Filter; @@ -24,7 +21,6 @@ import org.jetbrains.annotations.Nullable; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.util.List; import java.util.Map; @@ -40,166 +36,190 @@ public TasksResource( final ObjectMapperProvider objectMapperProvider, final RequestExecutor requestExecutor, final ConvertFilesResource convertFilesResource, final OptimizeFilesResource optimizeFilesResource, final CaptureWebsitesResource captureWebsitesResource, final MergeFilesResource mergeFilesResource, - final CreateArchivesResource createArchivesResource, final ExecuteCommandsResource executeCommandsResource + final CreateArchivesResource createArchivesResource, final ExecuteCommandsResource executeCommandsResource, + final CreateThumbnailsResource createThumbnailsResource, final GetMetadataResource getMetadataResource, + final WriteMetadataResource writeMetadataResource, final AddWatermarkResource addWatermarkResource ) { super(settingsProvider, objectMapperProvider, convertFilesResource, optimizeFilesResource, captureWebsitesResource, - mergeFilesResource, createArchivesResource, executeCommandsResource); + mergeFilesResource, createArchivesResource, executeCommandsResource, createThumbnailsResource, getMetadataResource, writeMetadataResource, addWatermarkResource); this.requestExecutor = requestExecutor; } public Result show( @NotNull final String taskId - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return show(taskId, ImmutableList.of()); } public Result show( @NotNull final String taskId, @NotNull final List includes - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getShowHttpUriRequest(taskId, includes), TASK_RESPONSE_TYPE_REFERENCE); } public Result wait( @NotNull final String taskId - ) throws IOException, URISyntaxException { - final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_TASKS, taskId, PATH_SEGMENT_WAIT)); - + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getWaitHttpUriRequest(taskId), TASK_RESPONSE_TYPE_REFERENCE); } - public Result> list() throws IOException, URISyntaxException { + public Result> list() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return list(ImmutableMap.of()); } public Result> list( @NotNull final Map filters - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return list(filters, ImmutableList.of()); } @Override public Result> list( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return list(filters, includes, null); } @Override public Result> list( @NotNull final Map filters, @NotNull final List includes, @Nullable final Pagination pagination - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getListHttpUriRequest(filters, includes, pagination), TASK_RESPONSE_PAGEABLE_TYPE_REFERENCE); } public Result cancel( @NotNull final String taskId - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getCancelHttpUriRequest(taskId), TASK_RESPONSE_TYPE_REFERENCE); } public Result retry( @NotNull final String taskId - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getRetryHttpUriRequest(taskId), TASK_RESPONSE_TYPE_REFERENCE); } public Result delete( @NotNull final String taskId - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getDeleteHttpUriRequest(taskId), VOID_TYPE_REFERENCE); } - public Result> operations() throws IOException, URISyntaxException { + public Result> operations() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return operations(ImmutableMap.of()); } public Result> operations( @NotNull final Map filters - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return operations(filters, ImmutableList.of()); } public Result> operations( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return operations(filters, includes, null); } public Result> operations( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getOperationsHttpUriRequest(filters, includes, alternative), OPERATION_RESPONSE_PAGEABLE_TYPE_REFERENCE); } @Override public Result convert( @NotNull final ConvertFilesTaskRequest convertFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convert(convertFilesTaskRequest); } @Override - public Result> convertFormats() throws IOException, URISyntaxException { + public Result> convertFormats() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convertFormats(); } @Override public Result> convertFormats( @NotNull final Map filters - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convertFormats(filters); } @Override public Result> convertFormats( @NotNull final Map filters, @NotNull final List includes - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convertFormats(filters, includes); } @Override public Result> convertFormats( @NotNull final Map filters, @NotNull final List includes, @Nullable final Boolean alternative - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractConvertFilesResource().convertFormats(filters, includes, alternative); } @Override public Result optimize( @NotNull final OptimizeFilesTaskRequest optimizeFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractOptimizeFilesResource().optimize(optimizeFilesTaskRequest); } @Override public Result capture( @NotNull final CaptureWebsitesTaskRequest captureWebsitesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractCaptureWebsitesResource().capture(captureWebsitesTaskRequest); } @Override public Result merge( @NotNull final MergeFilesTaskRequest mergeFilesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractMergeFilesResource().merge(mergeFilesTaskRequest); } @Override public Result archive( @NotNull final CreateArchivesTaskRequest createArchivesTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractCreateArchivesResource().archive(createArchivesTaskRequest); } @Override public Result command( @NotNull final ExecuteCommandsTaskRequest executeCommandsTaskRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return getAbstractExecuteCommandsResource().command(executeCommandsTaskRequest); } + @Override + public Result thumbnail(@NotNull CreateThumbnailsTaskRequest createThumbnailsTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return getAbstractCreateThumbnailsResource().thumbnail(createThumbnailsTaskRequest); + } + + @Override + public Result metadata(@NotNull GetMetadataTaskRequest getMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return getAbstractGetMetadataResource().metadata(getMetadataTaskRequest); + } + + @Override + public Result writeMetadata(@NotNull WriteMetadataTaskRequest writeMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return getAbstractWriteMetadataResource().writeMetadata(writeMetadataTaskRequest); + } + + @Override + public Result watermark(@NotNull AddWatermarkTaskRequest addWatermarkTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return getAbstractAddWatermarkResource().watermark(addWatermarkTaskRequest); + } + @Override public void close() throws IOException { requestExecutor.close(); diff --git a/src/main/java/com/cloudconvert/resource/sync/UsersResource.java b/src/main/java/com/cloudconvert/resource/sync/UsersResource.java index 0901da1..608b94e 100644 --- a/src/main/java/com/cloudconvert/resource/sync/UsersResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/UsersResource.java @@ -4,6 +4,8 @@ import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.response.UserResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractUsersResource; import lombok.extern.slf4j.Slf4j; @@ -26,7 +28,7 @@ public UsersResource( } @Override - public Result me() throws IOException, URISyntaxException { + public Result me() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getMeHttpUriRequest(), USER_RESPONSE_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/WebhookResource.java b/src/main/java/com/cloudconvert/resource/sync/WebhookResource.java index 101e581..8f149fb 100644 --- a/src/main/java/com/cloudconvert/resource/sync/WebhookResource.java +++ b/src/main/java/com/cloudconvert/resource/sync/WebhookResource.java @@ -6,6 +6,8 @@ import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.WebhookResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractWebhooksResource; import com.cloudconvert.resource.params.Filter; @@ -35,33 +37,33 @@ public WebhookResource( @Override public Result create( @NotNull final WebhookRequest webhookRequest - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getCreateHttpUriRequest(webhookRequest), WEBHOOKS_RESPONSE_TYPE_REFERENCE); } @Override - public Result> list() throws IOException, URISyntaxException { + public Result> list() throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return list(ImmutableMap.of()); } @Override public Result> list( @NotNull final Map filters - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return list(filters, null); } @Override public Result> list( @NotNull final Map filters, @Nullable final Pagination pagination - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getListHttpUriRequest(filters, pagination), WEBHOOKS_RESPONSE_PAGEABLE_TYPE_REFERENCE); } @Override public Result delete( @NotNull final String webhookId - ) throws IOException, URISyntaxException { + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { return requestExecutor.execute(getDeleteHttpUriRequest(webhookId), VOID_TYPE_REFERENCE); } diff --git a/src/main/java/com/cloudconvert/resource/sync/WriteMetadataResource.java b/src/main/java/com/cloudconvert/resource/sync/WriteMetadataResource.java new file mode 100644 index 0000000..c2a7fc0 --- /dev/null +++ b/src/main/java/com/cloudconvert/resource/sync/WriteMetadataResource.java @@ -0,0 +1,43 @@ +package com.cloudconvert.resource.sync; + +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.WriteMetadataTaskRequest; +import com.cloudconvert.dto.response.TaskResponse; +import com.cloudconvert.dto.result.Result; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.exception.CloudConvertServerException; +import com.cloudconvert.executor.RequestExecutor; +import com.cloudconvert.resource.AbstractWriteMetadataResource; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.URISyntaxException; + +@Slf4j +public class WriteMetadataResource extends AbstractWriteMetadataResource> { + + private final RequestExecutor requestExecutor; + + public WriteMetadataResource( + final SettingsProvider settingsProvider, + final ObjectMapperProvider objectMapperProvider, final RequestExecutor requestExecutor + ) { + super(settingsProvider, objectMapperProvider); + + this.requestExecutor = requestExecutor; + } + + @Override + public Result writeMetadata( + @NotNull final WriteMetadataTaskRequest getMetadataTaskRequest + ) throws IOException, URISyntaxException, CloudConvertClientException, CloudConvertServerException { + return requestExecutor.execute(getWriteMetadataHttpUriRequest(getMetadataTaskRequest), TASK_RESPONSE_TYPE_REFERENCE); + } + + @Override + public void close() throws IOException { + requestExecutor.close(); + } +} diff --git a/src/test/java/com/cloudconvert/test/framework/AbstractTest.java b/src/test/java/com/cloudconvert/test/framework/AbstractTest.java index 49fd82c..7973ae6 100644 --- a/src/test/java/com/cloudconvert/test/framework/AbstractTest.java +++ b/src/test/java/com/cloudconvert/test/framework/AbstractTest.java @@ -1,13 +1,21 @@ package com.cloudconvert.test.framework; import com.cloudconvert.resource.AbstractResource; +import org.junit.Before; +import org.mockito.MockitoAnnotations; public abstract class AbstractTest { public static final String API_URL = "https://api.sandbox.cloudconvert.com"; + public static final String API_SYNC_URL = "https://sync.api.sandbox.cloudconvert.com"; public static final String API_KEY = "api-key"; public static final String VALUE_AUTHORIZATION = AbstractResource.BEARER + " " + API_KEY; public static final long TIMEOUT = 300000L; + + @Before + public void initMocks() { + MockitoAnnotations.openMocks(this); + } } diff --git a/src/test/java/com/cloudconvert/test/integration/AsyncCloudConvertClientExceptionTest.java b/src/test/java/com/cloudconvert/test/integration/AsyncCloudConvertClientExceptionTest.java new file mode 100644 index 0000000..b7d006f --- /dev/null +++ b/src/test/java/com/cloudconvert/test/integration/AsyncCloudConvertClientExceptionTest.java @@ -0,0 +1,72 @@ +package com.cloudconvert.test.integration; + +import com.cloudconvert.client.AsyncCloudConvertClient; +import com.cloudconvert.client.setttings.PropertyFileSettingsProvider; +import com.cloudconvert.dto.request.UploadImportRequest; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.test.framework.AbstractTest; +import com.cloudconvert.test.framework.IntegrationTest; +import com.google.common.collect.ImmutableMap; +import org.apache.http.HttpStatus; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowableOfType; + +@Category(IntegrationTest.class) +@RunWith(JUnit4.class) +public class AsyncCloudConvertClientExceptionTest extends AbstractTest { + + private static final String JPG_TEST_FILE_1 = "image-test-file-1.jpg"; + + private AsyncCloudConvertClient asyncCloudConvertUnauthorizedClient; + private AsyncCloudConvertClient asyncCloudConvertAuthorizedClient; + + private InputStream jpgTest1InputStream; + + @Before + public void before() throws Exception { + asyncCloudConvertUnauthorizedClient = new AsyncCloudConvertClient(new PropertyFileSettingsProvider("invalid-application.properties")); + asyncCloudConvertAuthorizedClient = new AsyncCloudConvertClient(new PropertyFileSettingsProvider("application.properties")); + + jpgTest1InputStream = AsyncCloudConvertClientExceptionTest.class.getClassLoader().getResourceAsStream(JPG_TEST_FILE_1); + } + + @Test(timeout = TIMEOUT) + public void unauthorized() throws Exception { + final CloudConvertClientException cloudConvertClientException = catchThrowableOfType( + () -> asyncCloudConvertUnauthorizedClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream).get(), CloudConvertClientException.class); + + assertThat(cloudConvertClientException.getStatus().getCode()).isEqualTo(HttpStatus.SC_UNAUTHORIZED); + assertThat(cloudConvertClientException.getStatus().getReason()).isEqualTo("Unauthorized"); + assertThat(cloudConvertClientException.getHeaders()).containsKey("Content-Type"); + assertThat(cloudConvertClientException.getBody().getCode()).isEqualTo("UNAUTHENTICATED"); + assertThat(cloudConvertClientException.getBody().getMessage()).isEqualTo("Unauthenticated."); + } + + @Test(timeout = TIMEOUT) + public void unprocessableEntity() throws Exception { + final CloudConvertClientException cloudConvertClientException = catchThrowableOfType( + () -> asyncCloudConvertAuthorizedClient.jobs().create(ImmutableMap.of()).get(), CloudConvertClientException.class); + + assertThat(cloudConvertClientException.getStatus().getCode()).isEqualTo(HttpStatus.SC_UNPROCESSABLE_ENTITY); + assertThat(cloudConvertClientException.getStatus().getReason()).contains("Unprocessable"); + assertThat(cloudConvertClientException.getHeaders()).containsKey("Content-Type"); + assertThat(cloudConvertClientException.getBody().getCode()).isEqualTo("INVALID_DATA"); + assertThat(cloudConvertClientException.getBody().getErrors()).containsKey("tasks"); + } + + @After + public void after() throws Exception { + jpgTest1InputStream.close(); + asyncCloudConvertUnauthorizedClient.close(); + asyncCloudConvertAuthorizedClient.close(); + } +} diff --git a/src/test/java/com/cloudconvert/test/integration/AsyncImportsAndExportsIntegrationTest.java b/src/test/java/com/cloudconvert/test/integration/AsyncImportsAndExportsIntegrationTest.java index 514aa89..c3cd930 100644 --- a/src/test/java/com/cloudconvert/test/integration/AsyncImportsAndExportsIntegrationTest.java +++ b/src/test/java/com/cloudconvert/test/integration/AsyncImportsAndExportsIntegrationTest.java @@ -5,10 +5,12 @@ import com.cloudconvert.dto.Status; import com.cloudconvert.dto.request.AzureBlobExportRequest; import com.cloudconvert.dto.request.AzureBlobImportRequest; +import com.cloudconvert.dto.request.Base64ImportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageExportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest; import com.cloudconvert.dto.request.OpenStackExportRequest; import com.cloudconvert.dto.request.OpenStackImportRequest; +import com.cloudconvert.dto.request.RawImportRequest; import com.cloudconvert.dto.request.S3ExportRequest; import com.cloudconvert.dto.request.S3ImportRequest; import com.cloudconvert.dto.request.SftpExportRequest; @@ -64,7 +66,7 @@ public void before() throws Exception { public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { // Import upload (not immediate upload) final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest()).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -72,7 +74,7 @@ public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { // Cancel final Result cancelUploadImportTaskResponseResult = asyncCloudConvertClient.tasks().cancel(uploadImportTaskResponse.getId()).get(); - assertThat(cancelUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(cancelUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse cancelUploadImportTaskResponse = cancelUploadImportTaskResponseResult.getBody(); assertThat(cancelUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -84,7 +86,7 @@ public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { final AsyncResult retryUploadImportTaskResponseAsyncResult = asyncCloudConvertClient.tasks().retry(uploadImportTaskResponse.getId()); final Result retryUploadImportTaskResponseResult = retryUploadImportTaskResponseAsyncResult.get(); - assertThat(retryUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(retryUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse retryUploadImportTaskResponse = retryUploadImportTaskResponseResult.getBody(); assertThat(retryUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -93,14 +95,14 @@ public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { // Upload (actual upload) final Result uploadTaskResponseResult = asyncCloudConvertClient.importUsing() .upload(retryUploadImportTaskResponseAsyncResult, jpgTest1InputStream).get(); - assertThat(uploadTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadTaskResponse = uploadTaskResponseResult.getBody(); assertThat(uploadTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // Wait import upload final Result waitRetryUploadImportTaskResponseResult = asyncCloudConvertClient.tasks().wait(retryUploadImportTaskResponse.getId()).get(); - assertThat(waitRetryUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitRetryUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitRetryUploadImportTaskResponse = waitRetryUploadImportTaskResponseResult.getBody(); assertThat(waitRetryUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -112,14 +114,14 @@ public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { public void uploadImportInputStreamAndExportUrlTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // Wait import upload final Result waitUploadImportTaskResponseResult = asyncCloudConvertClient.tasks().wait(uploadImportTaskResponse.getId()).get(); - assertThat(waitUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitUploadImportTaskResponse = waitUploadImportTaskResponseResult.getBody(); assertThat(waitUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -128,14 +130,14 @@ public void uploadImportInputStreamAndExportUrlTaskLifecycle() throws Exception // Export url final UrlExportRequest urlExportRequest = new UrlExportRequest().setInput(uploadImportTaskResponse.getId()); final Result urlExportTaskResponseResult = asyncCloudConvertClient.exportUsing().url(urlExportRequest).get(); - assertThat(urlExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(urlExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse urlExportTaskResponse = urlExportTaskResponseResult.getBody(); assertThat(urlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); // Wait export url final Result waitUrlExportTaskResponseResult = asyncCloudConvertClient.tasks().wait(urlExportTaskResponse.getId()).get(); - assertThat(waitUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitUrlExportTaskResponse = waitUrlExportTaskResponseResult.getBody(); assertThat(waitUrlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); @@ -144,7 +146,7 @@ public void uploadImportInputStreamAndExportUrlTaskLifecycle() throws Exception // Download file final Result inputStreamResult = asyncCloudConvertClient.files().download(waitUrlExportTaskResponse.getResult().getFiles().get(0).get("url")).get(); - assertThat(inputStreamResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(inputStreamResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); assertThat(MimeTypes.getDefaultMimeTypes().forName(tika.detect(inputStreamResult.getBody())).getName()).isEqualTo("image/jpeg"); } @@ -152,14 +154,14 @@ public void uploadImportInputStreamAndExportUrlTaskLifecycle() throws Exception public void uploadImportFileAndExportUrlTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1File).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // Wait import upload final Result waitUploadImportTaskResponseResult = asyncCloudConvertClient.tasks().wait(uploadImportTaskResponse.getId()).get(); - assertThat(waitUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitUploadImportTaskResponse = waitUploadImportTaskResponseResult.getBody(); assertThat(waitUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -168,14 +170,14 @@ public void uploadImportFileAndExportUrlTaskLifecycle() throws Exception { // Export url final UrlExportRequest urlExportRequest = new UrlExportRequest().setInput(uploadImportTaskResponse.getId()); final Result urlExportTaskResponseResult = asyncCloudConvertClient.exportUsing().url(urlExportRequest).get(); - assertThat(urlExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(urlExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse urlExportTaskResponse = urlExportTaskResponseResult.getBody(); assertThat(urlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); // Wait export url final Result waitUrlExportTaskResponseResult = asyncCloudConvertClient.tasks().wait(urlExportTaskResponse.getId()).get(); - assertThat(waitUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitUrlExportTaskResponse = waitUrlExportTaskResponseResult.getBody(); assertThat(waitUrlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); @@ -184,7 +186,7 @@ public void uploadImportFileAndExportUrlTaskLifecycle() throws Exception { // Download file final Result inputStreamResult = asyncCloudConvertClient.files().download(waitUrlExportTaskResponse.getResult().getFiles().get(0).get("url")).get(); - assertThat(inputStreamResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(inputStreamResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); assertThat(MimeTypes.getDefaultMimeTypes().forName(tika.detect(inputStreamResult.getBody())).getName()).isEqualTo("image/jpeg"); } @@ -197,7 +199,7 @@ public void importTasksCreation() throws Exception { // Import url final UrlImportRequest urlImportRequest = new UrlImportRequest().setUrl("http://some-url.com").setFilename("some-filename.jpg"); final Result urlImportTaskResponseResult = asyncCloudConvertClient.importUsing().url(urlImportRequest).get(); - assertThat(urlImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(urlImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse urlImportTaskResponse = urlImportTaskResponseResult.getBody(); assertThat(urlImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_URL); @@ -205,7 +207,7 @@ public void importTasksCreation() throws Exception { // Import upload final UploadImportRequest uploadImportRequest = new UploadImportRequest(); final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(uploadImportRequest).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -214,7 +216,7 @@ public void importTasksCreation() throws Exception { final S3ImportRequest s3ImportRequest = new S3ImportRequest().setBucket("some-bucket").setRegion("some-region") .setAccessKeyId("some-access-key-id").setSecretAccessKey("some-secret-access-key").setKey("some-key"); final Result s3ImportTaskResponseResult = asyncCloudConvertClient.importUsing().s3(s3ImportRequest).get(); - assertThat(s3ImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(s3ImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse s3ImportTaskResponse = s3ImportTaskResponseResult.getBody(); assertThat(s3ImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_S3); @@ -223,7 +225,7 @@ public void importTasksCreation() throws Exception { final AzureBlobImportRequest azureBlobImportRequest = new AzureBlobImportRequest().setStorageAccount("some-storage-account") .setStorageAccessKey("some-storage-access-key").setContainer("some-container").setBlob("some-blob"); final Result azureBlobImportTaskResponseResult = asyncCloudConvertClient.importUsing().azureBlob(azureBlobImportRequest).get(); - assertThat(azureBlobImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(azureBlobImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse azureBlobImportTaskResponse = azureBlobImportTaskResponseResult.getBody(); assertThat(azureBlobImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_AZURE_BLOB); @@ -234,7 +236,7 @@ public void importTasksCreation() throws Exception { .setPrivateKey("some-private-key").setFile("some-file"); final Result googleCloudStorageImportTaskResponseResult = asyncCloudConvertClient.importUsing() .googleCloudStorage(googleCloudStorageImportRequest).get(); - assertThat(googleCloudStorageImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(googleCloudStorageImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse googleCloudStorageImportTaskResponse = googleCloudStorageImportTaskResponseResult.getBody(); assertThat(googleCloudStorageImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_GOOGLE_CLOUD_STORAGE); @@ -244,7 +246,7 @@ public void importTasksCreation() throws Exception { .setAuthUrl("some-auth-url").setUsername("some-username").setPassword("some-password") .setRegion("some-region").setContainer("some-container").setFile("some-file"); final Result openStackImportTaskResponseResult = asyncCloudConvertClient.importUsing().openStack(openStackImportRequest).get(); - assertThat(openStackImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(openStackImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse openStackImportTaskResponse = openStackImportTaskResponseResult.getBody(); assertThat(openStackImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_OPENSTACK); @@ -253,10 +255,26 @@ public void importTasksCreation() throws Exception { final SftpImportRequest sftpImportRequest = new SftpImportRequest().setHost("some-host").setUsername("some-username") .setPassword("some-password").setFile("some-file"); final Result sftpImportTaskResponseResult = asyncCloudConvertClient.importUsing().sftp(sftpImportRequest).get(); - assertThat(sftpImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(sftpImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse sftpImportTaskResponse = sftpImportTaskResponseResult.getBody(); assertThat(sftpImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_SFTP); + + // Import Base64 + final Base64ImportRequest base64ImportRequest = new Base64ImportRequest().setFile("dGVzdDEyMw==").setFilename("test.txt"); + final Result base64ImportTaskResponseResult = asyncCloudConvertClient.importUsing().base64(base64ImportRequest).get(); + assertThat(base64ImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse base64ImportTaskResponse = base64ImportTaskResponseResult.getBody(); + assertThat(base64ImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_BASE64); + + // Import Raw + final RawImportRequest rawImportRequest = new RawImportRequest().setFile("content").setFilename("test.txt"); + final Result rawImportTaskResponseResult = asyncCloudConvertClient.importUsing().raw(rawImportRequest).get(); + assertThat(rawImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse rawImportTaskResponse = rawImportTaskResponseResult.getBody(); + assertThat(rawImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_RAW); } /** @@ -268,7 +286,7 @@ public void exportTasksCreation() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing() .upload(new UploadImportRequest(), jpgTest1InputStream).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -276,7 +294,7 @@ public void exportTasksCreation() throws Exception { // Export url final UrlExportRequest urlExportRequest = new UrlExportRequest().setInput(uploadImportTaskResponse.getId()); final Result urlExportTaskResponseResult = asyncCloudConvertClient.exportUsing().url(urlExportRequest).get(); - assertThat(urlExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(urlExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse urlExportTaskResponse = urlExportTaskResponseResult.getBody(); assertThat(urlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); @@ -286,7 +304,7 @@ public void exportTasksCreation() throws Exception { .setBucket("some-bucket").setRegion("some-region").setAccessKeyId("some-access-key-id") .setSecretAccessKey("some-secret-access-key").setKey("some-key"); final Result s3ExportTaskResponseResult = asyncCloudConvertClient.exportUsing().s3(s3ExportRequest).get(); - assertThat(s3ExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(s3ExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse s3ExportTaskResponse = s3ExportTaskResponseResult.getBody(); assertThat(s3ExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_S3); @@ -296,7 +314,7 @@ public void exportTasksCreation() throws Exception { .setInput(uploadImportTaskResponse.getId()).setStorageAccount("some-storage-account") .setStorageAccessKey("some-storage-access-key").setContainer("some-container").setBlob("some-blob"); final Result azureBlobExportTaskResponseResult = asyncCloudConvertClient.exportUsing().azureBlob(azureBlobExportRequest).get(); - assertThat(azureBlobExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(azureBlobExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse azureBlobExportTaskResponse = azureBlobExportTaskResponseResult.getBody(); assertThat(azureBlobExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_AZURE_BLOB); @@ -307,7 +325,7 @@ public void exportTasksCreation() throws Exception { .setBucket("some-bucket").setClientEmail("some-client-email").setPrivateKey("some-private-key").setFile("some-file"); final Result googleCloudStorageExportTaskResponseResult = asyncCloudConvertClient.exportUsing() .googleCloudStorage(googleCloudStorageExportRequest).get(); - assertThat(googleCloudStorageExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(googleCloudStorageExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse googleCloudStorageExportTaskResponse = googleCloudStorageExportTaskResponseResult.getBody(); assertThat(googleCloudStorageExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_GOOGLE_CLOUD_STORAGE); @@ -317,7 +335,7 @@ public void exportTasksCreation() throws Exception { .setInput(uploadImportTaskResponse.getId()).setAuthUrl("some-auth-url").setUsername("some-username") .setPassword("some-password").setRegion("some-region").setContainer("some-container").setFile("some-file"); final Result openStackExportTaskResponseResult = asyncCloudConvertClient.exportUsing().openStack(openStackExportRequest).get(); - assertThat(openStackExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(openStackExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse openStackExportTaskResponse = openStackExportTaskResponseResult.getBody(); assertThat(openStackExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_OPENSTACK); @@ -326,7 +344,7 @@ public void exportTasksCreation() throws Exception { final SftpExportRequest sftpExportRequest = new SftpExportRequest().setInput(uploadImportTaskResponse.getId()) .setHost("some-host").setUsername("some-username").setPassword("some-password").setFile("some-file"); final Result sftpExportTaskResponseResult = asyncCloudConvertClient.exportUsing().sftp(sftpExportRequest).get(); - assertThat(sftpExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(sftpExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse sftpExportTaskResponse = sftpExportTaskResponseResult.getBody(); assertThat(sftpExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_SFTP); diff --git a/src/test/java/com/cloudconvert/test/integration/AsyncJobsIntegrationTest.java b/src/test/java/com/cloudconvert/test/integration/AsyncJobsIntegrationTest.java index ab60d35..826ccfe 100644 --- a/src/test/java/com/cloudconvert/test/integration/AsyncJobsIntegrationTest.java +++ b/src/test/java/com/cloudconvert/test/integration/AsyncJobsIntegrationTest.java @@ -72,7 +72,7 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Create job final Result jobResponseResult = asyncCloudConvertClient.jobs().create(tasks).get(); - assertThat(jobResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(jobResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final JobResponse jobResponse = jobResponseResult.getBody(); assertThat(jobResponse.getTasks()).hasSize(3); @@ -92,7 +92,7 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Upload (actual upload file 1) final Result uploadFile1TaskResponseResult = asyncCloudConvertClient.importUsing() .upload(uploadFile1TaskJobResponse.getId(), uploadFile1TaskJobResponse.getResult().getForm(), odtTest1InputStream).get(); - assertThat(uploadFile1TaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadFile1TaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadFile1TaskResponse = uploadFile1TaskResponseResult.getBody(); assertThat(uploadFile1TaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -100,14 +100,14 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Upload (actual upload file 2) final Result uploadFile2TaskResponseResult = asyncCloudConvertClient.importUsing() .upload(uploadFile2TaskJobResponse.getId(), uploadFile2TaskJobResponse.getResult().getForm(), odtTest2InputStream).get(); - assertThat(uploadFile2TaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadFile2TaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadFile2TaskResponse = uploadFile2TaskResponseResult.getBody(); assertThat(uploadFile2TaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // Wait final Result waitJobResponseResult = asyncCloudConvertClient.jobs().wait(jobResponse.getId()).get(); - assertThat(waitJobResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitJobResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final JobResponse waitJobResponse = waitJobResponseResult.getBody(); assertThat(waitJobResponse.getStatus()).isEqualTo(Status.FINISHED); @@ -115,7 +115,7 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Show final Result showJobResponseResult = asyncCloudConvertClient.jobs().show(jobResponse.getId()).get(); - assertThat(showJobResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showJobResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final JobResponse showJobResponse = showJobResponseResult.getBody(); assertThat(showJobResponse.getStatus()).isEqualTo(Status.FINISHED); @@ -123,7 +123,7 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Delete job final Result deleteVoidResult = asyncCloudConvertClient.jobs().delete(jobResponse.getId()).get(); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) @@ -131,7 +131,7 @@ public void listJobsLifecycle() throws Exception { // List jobs final Result> jobResponsePageable = asyncCloudConvertClient.jobs() .list(ImmutableMap.of(), ImmutableList.of(), new Pagination(10, 1)).get(); - assertThat(jobResponsePageable.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(jobResponsePageable.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); } @After diff --git a/src/test/java/com/cloudconvert/test/integration/AsyncTasksIntegrationTest.java b/src/test/java/com/cloudconvert/test/integration/AsyncTasksIntegrationTest.java index 7aa5d5f..7edc04c 100644 --- a/src/test/java/com/cloudconvert/test/integration/AsyncTasksIntegrationTest.java +++ b/src/test/java/com/cloudconvert/test/integration/AsyncTasksIntegrationTest.java @@ -3,12 +3,7 @@ import com.cloudconvert.client.AsyncCloudConvertClient; import com.cloudconvert.dto.Operation; import com.cloudconvert.dto.Status; -import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; -import com.cloudconvert.dto.request.ConvertFilesTaskRequest; -import com.cloudconvert.dto.request.CreateArchivesTaskRequest; -import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; -import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; -import com.cloudconvert.dto.request.UploadImportRequest; +import com.cloudconvert.dto.request.*; import com.cloudconvert.dto.response.OperationResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; @@ -27,6 +22,7 @@ import org.junit.runners.JUnit4; import java.io.InputStream; +import java.util.HashMap; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -58,14 +54,14 @@ public void before() throws Exception { public void convertFileTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // List convert formats final Result> convertFormatsOperationResponsePageableResult = asyncCloudConvertClient.tasks().convertFormats().get(); - assertThat(convertFormatsOperationResponsePageableResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(convertFormatsOperationResponsePageableResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final List operationResponses = convertFormatsOperationResponsePageableResult.getBody().getData(); assertThat(operationResponses).anySatisfy(operationResponse -> assertThat(operationResponse.getOutputFormat()).isEqualTo(JPG)); @@ -73,14 +69,14 @@ public void convertFileTaskLifecycle() throws Exception { // Convert final ConvertFilesTaskRequest convertFilesTaskRequest = new ConvertFilesTaskRequest().setInput(uploadImportTaskResponse.getId()).setInputFormat(JPG).setOutputFormat(PNG); final Result convertTaskResponseResult = asyncCloudConvertClient.tasks().convert(convertFilesTaskRequest).get(); - assertThat(convertTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(convertTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse convertTaskResponse = convertTaskResponseResult.getBody(); assertThat(convertTaskResponse.getOperation()).isEqualTo(Operation.CONVERT); // Wait final Result waitConvertTaskResponseResult = asyncCloudConvertClient.tasks().wait(convertTaskResponse.getId()).get(); - assertThat(waitConvertTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitConvertTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitConvertTaskResponse = waitConvertTaskResponseResult.getBody(); assertThat(waitConvertTaskResponse.getOperation()).isEqualTo(Operation.CONVERT); @@ -89,7 +85,7 @@ public void convertFileTaskLifecycle() throws Exception { // Show final Result showConvertTaskResponseResult = asyncCloudConvertClient.tasks().show(convertTaskResponse.getId()).get(); - assertThat(showConvertTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showConvertTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showConvertTaskResponse = showConvertTaskResponseResult.getBody(); assertThat(showConvertTaskResponse.getOperation()).isEqualTo(Operation.CONVERT); @@ -98,14 +94,14 @@ public void convertFileTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(convertTaskResponse.getId()).get(); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) public void optimizeFileTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -113,14 +109,14 @@ public void optimizeFileTaskLifecycle() throws Exception { // Optimize final OptimizeFilesTaskRequest optimizeFilesTaskRequest = new OptimizeFilesTaskRequest().setInput(uploadImportTaskResponse.getId()).setInputFormat(JPG); final Result optimizeTaskResponseResult = asyncCloudConvertClient.tasks().optimize(optimizeFilesTaskRequest).get(); - assertThat(optimizeTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(optimizeTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse optimizeTaskResponse = optimizeTaskResponseResult.getBody(); assertThat(optimizeTaskResponse.getOperation()).isEqualTo(Operation.OPTIMIZE); // Wait final Result waitOptimizeTaskResponseResult = asyncCloudConvertClient.tasks().wait(optimizeTaskResponse.getId()).get(); - assertThat(waitOptimizeTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitOptimizeTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitOptimizeTaskResponse = waitOptimizeTaskResponseResult.getBody(); assertThat(waitOptimizeTaskResponse.getOperation()).isEqualTo(Operation.OPTIMIZE); @@ -129,7 +125,7 @@ public void optimizeFileTaskLifecycle() throws Exception { // Show final Result showOptimizeTaskResponseResult = asyncCloudConvertClient.tasks().show(optimizeTaskResponse.getId()).get(); - assertThat(showOptimizeTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showOptimizeTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showOptimizeTaskResponse = showOptimizeTaskResponseResult.getBody(); assertThat(showOptimizeTaskResponse.getOperation()).isEqualTo(Operation.OPTIMIZE); @@ -138,7 +134,7 @@ public void optimizeFileTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(optimizeTaskResponse.getId()).get(); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) @@ -146,14 +142,14 @@ public void captureWebsiteTaskLifecycle() throws Exception { // Capture final CaptureWebsitesTaskRequest captureWebsitesTaskRequest = new CaptureWebsitesTaskRequest().setUrl(URL).setOutputFormat(PDF); final Result captureTaskResponseResult = asyncCloudConvertClient.tasks().capture(captureWebsitesTaskRequest).get(); - assertThat(captureTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(captureTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse captureTaskResponse = captureTaskResponseResult.getBody(); assertThat(captureTaskResponse.getOperation()).isEqualTo(Operation.CAPTURE_WEBSITE); // Wait final Result waitCaptureTaskResponseResult = asyncCloudConvertClient.tasks().wait(captureTaskResponse.getId()).get(); - assertThat(waitCaptureTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitCaptureTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitCaptureTaskResponse = waitCaptureTaskResponseResult.getBody(); assertThat(waitCaptureTaskResponse.getOperation()).isEqualTo(Operation.CAPTURE_WEBSITE); @@ -162,7 +158,7 @@ public void captureWebsiteTaskLifecycle() throws Exception { // Show final Result showCaptureTaskResponseResult = asyncCloudConvertClient.tasks().show(captureTaskResponse.getId()).get(); - assertThat(showCaptureTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showCaptureTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showCaptureTaskResponse = showCaptureTaskResponseResult.getBody(); assertThat(showCaptureTaskResponse.getOperation()).isEqualTo(Operation.CAPTURE_WEBSITE); @@ -171,7 +167,7 @@ public void captureWebsiteTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(captureTaskResponse.getId()).get(); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) @@ -179,7 +175,7 @@ public void createArchiveTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing() .upload(new UploadImportRequest(), jpgTest1InputStream).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -188,14 +184,14 @@ public void createArchiveTaskLifecycle() throws Exception { final CreateArchivesTaskRequest createArchivesTaskRequest = new CreateArchivesTaskRequest() .setInput(uploadImportTaskResponse.getId()).setOutputFormat(ZIP); final Result archiveTaskResponseResult = asyncCloudConvertClient.tasks().archive(createArchivesTaskRequest).get(); - assertThat(archiveTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(archiveTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse archiveTaskResponse = archiveTaskResponseResult.getBody(); assertThat(archiveTaskResponse.getOperation()).isEqualTo(Operation.ARCHIVE); // Wait final Result waitArchiveTaskResponseResult = asyncCloudConvertClient.tasks().wait(archiveTaskResponse.getId()).get(); - assertThat(waitArchiveTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitArchiveTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitArchiveTaskResponse = waitArchiveTaskResponseResult.getBody(); assertThat(waitArchiveTaskResponse.getOperation()).isEqualTo(Operation.ARCHIVE); @@ -204,7 +200,7 @@ public void createArchiveTaskLifecycle() throws Exception { // Show final Result showArchiveTaskResponseResult = asyncCloudConvertClient.tasks().show(archiveTaskResponse.getId()).get(); - assertThat(showArchiveTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showArchiveTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showArchiveTaskResponse = showArchiveTaskResponseResult.getBody(); assertThat(showArchiveTaskResponse.getOperation()).isEqualTo(Operation.ARCHIVE); @@ -213,7 +209,7 @@ public void createArchiveTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(archiveTaskResponse.getId()).get(); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) @@ -221,7 +217,7 @@ public void executeCommandTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing() .upload(new UploadImportRequest(), jpgTest1InputStream).get(); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -231,14 +227,14 @@ public void executeCommandTaskLifecycle() throws Exception { .setInput(uploadImportTaskResponse.getId()).setEngine(ExecuteCommandsTaskRequest.Engine.GRAPHICSMAGICK) .setCommand(ExecuteCommandsTaskRequest.Command.GM).setArguments("version"); final Result executeTaskResponseResult = asyncCloudConvertClient.tasks().command(executeCommandsTaskRequest).get(); - assertThat(executeTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(executeTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse executeTaskResponse = executeTaskResponseResult.getBody(); assertThat(executeTaskResponse.getOperation()).isEqualTo(Operation.COMMAND); // Wait final Result waitExecuteTaskResponseResult = asyncCloudConvertClient.tasks().wait(executeTaskResponse.getId()).get(); - assertThat(waitExecuteTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitExecuteTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitExecuteTaskResponse = waitExecuteTaskResponseResult.getBody(); assertThat(waitExecuteTaskResponse.getOperation()).isEqualTo(Operation.COMMAND); @@ -247,7 +243,7 @@ public void executeCommandTaskLifecycle() throws Exception { // Show final Result showExecuteTaskResponseResult = asyncCloudConvertClient.tasks().show(executeTaskResponse.getId()).get(); - assertThat(showExecuteTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showExecuteTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showExecuteTaskResponse = showExecuteTaskResponseResult.getBody(); assertThat(showExecuteTaskResponse.getOperation()).isEqualTo(Operation.COMMAND); @@ -256,19 +252,183 @@ public void executeCommandTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(executeTaskResponse.getId()).get(); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); + } + + @Test(timeout = TIMEOUT) + public void createThumbnailTaskLifecycle() throws Exception { + // Import upload (immediate upload) + final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream).get(); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); + assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); + + // Convert + final CreateThumbnailsTaskRequest createThumbnailsTaskRequest = new CreateThumbnailsTaskRequest().setInput(uploadImportTaskResponse.getId()).setInputFormat(JPG).setOutputFormat(PNG); + final Result thumbnailTaskResponseResult = asyncCloudConvertClient.tasks().thumbnail(createThumbnailsTaskRequest).get(); + assertThat(thumbnailTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse thumbnailTaskResponse = thumbnailTaskResponseResult.getBody(); + assertThat(thumbnailTaskResponse.getOperation()).isEqualTo(Operation.THUMBNAIL); + + // Wait + final Result waitThumbnailTaskResponseResult = asyncCloudConvertClient.tasks().wait(thumbnailTaskResponse.getId()).get(); + assertThat(waitThumbnailTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse waitThumbnailTaskResponse = waitThumbnailTaskResponseResult.getBody(); + assertThat(waitThumbnailTaskResponse.getOperation()).isEqualTo(Operation.THUMBNAIL); + assertThat(waitThumbnailTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(waitThumbnailTaskResponse.getId()).isEqualTo(thumbnailTaskResponse.getId()); + + // Show + final Result showConvertTaskResponseResult = asyncCloudConvertClient.tasks().show(thumbnailTaskResponse.getId()).get(); + assertThat(showConvertTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse showConvertTaskResponse = showConvertTaskResponseResult.getBody(); + assertThat(showConvertTaskResponse.getOperation()).isEqualTo(Operation.THUMBNAIL); + assertThat(showConvertTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(showConvertTaskResponse.getId()).isEqualTo(thumbnailTaskResponse.getId()); + + // Delete + final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(thumbnailTaskResponse.getId()).get(); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); + } + + @Test(timeout = TIMEOUT) + public void getMetadataTaskLifecycle() throws Exception { + // Import upload (immediate upload) + final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream).get(); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); + assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); + + // Get Metadata + final GetMetadataTaskRequest getMetadataTaskRequest = new GetMetadataTaskRequest().setInput(uploadImportTaskResponse.getId()).setInputFormat(JPG); + final Result getMetadataTaskResponseResult = asyncCloudConvertClient.tasks().metadata(getMetadataTaskRequest).get(); + assertThat(getMetadataTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse metadataTaskResponse = getMetadataTaskResponseResult.getBody(); + assertThat(metadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA); + + // Wait + final Result waitGetMetadataResponseResult = asyncCloudConvertClient.tasks().wait(metadataTaskResponse.getId()).get(); + assertThat(waitGetMetadataResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse waitMetadataTaskResponse = waitGetMetadataResponseResult.getBody(); + assertThat(waitMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA); + assertThat(waitMetadataTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(waitMetadataTaskResponse.getId()).isEqualTo(metadataTaskResponse.getId()); + + // Show + final Result showMetadataResponseResult = asyncCloudConvertClient.tasks().show(metadataTaskResponse.getId()).get(); + assertThat(showMetadataResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse showMetadataTaskResponse = showMetadataResponseResult.getBody(); + assertThat(showMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA); + assertThat(showMetadataTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(showMetadataTaskResponse.getId()).isEqualTo(metadataTaskResponse.getId()); + assertThat(showMetadataTaskResponse.getResult().getMetadata()).isNotEmpty(); + + // Delete + final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(metadataTaskResponse.getId()).get(); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); + } + + @Test(timeout = TIMEOUT) + public void writeMetadataTaskLifecycle() throws Exception { + // Import upload (immediate upload) + final Result uploadImportTaskResponseResult = asyncCloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream).get(); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); + assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); + + // Write Metadata + final WriteMetadataTaskRequest writeMetadataTaskRequest = new WriteMetadataTaskRequest() + .setInput(uploadImportTaskResponse.getId()) + .setInputFormat(JPG) + .setMetadata(new HashMap() {{ + put("Author", "CloudConvert"); + }}); + final Result writeMetadataTaskResponseResult = asyncCloudConvertClient.tasks().writeMetadata(writeMetadataTaskRequest).get(); + assertThat(writeMetadataTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse writeMetadataTaskResponse = writeMetadataTaskResponseResult.getBody(); + assertThat(writeMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA_WRITE); + + // Wait + final Result waitWriteMetadataResponseResult = asyncCloudConvertClient.tasks().wait(writeMetadataTaskResponse.getId()).get(); + assertThat(waitWriteMetadataResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse waitWriteMetadataTaskResponse = waitWriteMetadataResponseResult.getBody(); + assertThat(waitWriteMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA_WRITE); + assertThat(waitWriteMetadataTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(waitWriteMetadataTaskResponse.getId()).isEqualTo(writeMetadataTaskResponse.getId()); + + // Show + final Result showWriteMetadataResponseResult = asyncCloudConvertClient.tasks().show(writeMetadataTaskResponse.getId()).get(); + assertThat(showWriteMetadataResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse showWriteMetadataTaskResponse = showWriteMetadataResponseResult.getBody(); + assertThat(showWriteMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA_WRITE); + assertThat(showWriteMetadataTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(showWriteMetadataTaskResponse.getId()).isEqualTo(writeMetadataTaskResponse.getId()); + + // Delete + final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(writeMetadataTaskResponse.getId()).get(); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); + } + + + @Test(timeout = TIMEOUT) + public void addWatermarkTaskLifecycle() throws Exception { + + // Watermark + final AddWatermarkTaskRequest addWatermarkTaskRequest = new AddWatermarkTaskRequest() + .setInputFormat(JPG) + .setProperty("text", "Hello World"); + final Result watermarkTaskResponseResult = asyncCloudConvertClient.tasks().watermark(addWatermarkTaskRequest).get(); + assertThat(watermarkTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse watermarkTaskResponse = watermarkTaskResponseResult.getBody(); + assertThat(watermarkTaskResponse.getOperation()).isEqualTo(Operation.WATERMARK); + + // Wait + final Result waitWatermarkTaskResponseResult = asyncCloudConvertClient.tasks().wait(watermarkTaskResponse.getId()).get(); + assertThat(waitWatermarkTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse waitThumbnailTaskResponse = waitWatermarkTaskResponseResult.getBody(); + assertThat(waitThumbnailTaskResponse.getOperation()).isEqualTo(Operation.WATERMARK); + assertThat(waitThumbnailTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(waitThumbnailTaskResponse.getId()).isEqualTo(watermarkTaskResponse.getId()); + + // Show + final Result showWatermarkTaskResponseResult = asyncCloudConvertClient.tasks().show(watermarkTaskResponse.getId()).get(); + assertThat(showWatermarkTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse showWatermarkTaskResponse = showWatermarkTaskResponseResult.getBody(); + assertThat(showWatermarkTaskResponse.getOperation()).isEqualTo(Operation.WATERMARK); + assertThat(showWatermarkTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(showWatermarkTaskResponse.getId()).isEqualTo(watermarkTaskResponse.getId()); + + // Delete + final Result deleteVoidResult = asyncCloudConvertClient.tasks().delete(watermarkTaskResponse.getId()).get(); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) public void listTasksLifecycle() throws Exception { // List operations - final Result> operationResponsePageable = asyncCloudConvertClient.tasks().operations().get(); - assertThat(operationResponsePageable.getStatus()).isEqualTo(HttpStatus.SC_OK); + // Currently disabled because they are some unsupported operations + //final Result> operationResponsePageable = asyncCloudConvertClient.tasks().operations().get(); + //assertThat(operationResponsePageable.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); // List tasks final Result> taskResponsePageable = asyncCloudConvertClient.tasks() .list(ImmutableMap.of(), ImmutableList.of(), new Pagination(100, 1)).get(); - assertThat(taskResponsePageable.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(taskResponsePageable.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); } @After diff --git a/src/test/java/com/cloudconvert/test/integration/AsyncWebhooksIntegrationTest.java b/src/test/java/com/cloudconvert/test/integration/AsyncWebhooksIntegrationTest.java index e0de434..1054c09 100644 --- a/src/test/java/com/cloudconvert/test/integration/AsyncWebhooksIntegrationTest.java +++ b/src/test/java/com/cloudconvert/test/integration/AsyncWebhooksIntegrationTest.java @@ -37,7 +37,7 @@ public void before() throws Exception { @Test(timeout = TIMEOUT) public void userLifecycle() throws Exception { final Result userResponseResult = asyncCloudConvertClient.users().me().get(); - assertThat(userResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(userResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); assertThat(userResponseResult.getBody()).isNotNull(); } @@ -47,7 +47,7 @@ public void webhooksLifecycle() throws Exception { final WebhookRequest webhookRequest = new WebhookRequest().setUrl("http://some-url.com") .setEvents(ImmutableList.of(Event.JOB_CREATED, Event.JOB_FAILED, Event.JOB_FINISHED)); final Result createWebhookResponseResult = asyncCloudConvertClient.webhooks().create(webhookRequest).get(); - assertThat(createWebhookResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(createWebhookResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); assertThat(createWebhookResponseResult.getBody()).isNotNull(); final WebhookResponse createWebhookResponse = createWebhookResponseResult.getBody(); @@ -55,11 +55,11 @@ public void webhooksLifecycle() throws Exception { // List final Result> webhookResponsePageable = asyncCloudConvertClient.webhooks().list().get(); - assertThat(webhookResponsePageable.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(webhookResponsePageable.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); // Delete final Result deleteWebhookResponseResult = asyncCloudConvertClient.webhooks().delete(createWebhookResponse.getId()).get(); - assertThat(deleteWebhookResponseResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteWebhookResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); // Verify assertThat(asyncCloudConvertClient.webhooks().verify(WEBHOOK_PAYLOAD, WEBHOOK_SIGNATURE)).isTrue(); diff --git a/src/test/java/com/cloudconvert/test/integration/CloudConvertClientExceptionTest.java b/src/test/java/com/cloudconvert/test/integration/CloudConvertClientExceptionTest.java new file mode 100644 index 0000000..e51e506 --- /dev/null +++ b/src/test/java/com/cloudconvert/test/integration/CloudConvertClientExceptionTest.java @@ -0,0 +1,72 @@ +package com.cloudconvert.test.integration; + +import com.cloudconvert.client.CloudConvertClient; +import com.cloudconvert.client.setttings.PropertyFileSettingsProvider; +import com.cloudconvert.dto.request.UploadImportRequest; +import com.cloudconvert.exception.CloudConvertClientException; +import com.cloudconvert.test.framework.AbstractTest; +import com.cloudconvert.test.framework.IntegrationTest; +import com.google.common.collect.ImmutableMap; +import org.apache.http.HttpStatus; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowableOfType; + +@Category(IntegrationTest.class) +@RunWith(JUnit4.class) +public class CloudConvertClientExceptionTest extends AbstractTest { + + private static final String JPG_TEST_FILE_1 = "image-test-file-1.jpg"; + + private CloudConvertClient cloudConvertUnauthorizedClient; + private CloudConvertClient cloudConvertAuthorizedClient; + + private InputStream jpgTest1InputStream; + + @Before + public void before() throws Exception { + cloudConvertUnauthorizedClient = new CloudConvertClient(new PropertyFileSettingsProvider("invalid-application.properties")); + cloudConvertAuthorizedClient = new CloudConvertClient(new PropertyFileSettingsProvider("application.properties")); + + jpgTest1InputStream = CloudConvertClientExceptionTest.class.getClassLoader().getResourceAsStream(JPG_TEST_FILE_1); + } + + @Test(timeout = TIMEOUT) + public void unauthorized() throws Exception { + final CloudConvertClientException cloudConvertClientException = catchThrowableOfType( + () -> cloudConvertUnauthorizedClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream), CloudConvertClientException.class); + + assertThat(cloudConvertClientException.getStatus().getCode()).isEqualTo(HttpStatus.SC_UNAUTHORIZED); + assertThat(cloudConvertClientException.getStatus().getReason()).isEqualTo("Unauthorized"); + assertThat(cloudConvertClientException.getHeaders()).containsKey("Content-Type"); + assertThat(cloudConvertClientException.getBody().getCode()).isEqualTo("UNAUTHENTICATED"); + assertThat(cloudConvertClientException.getBody().getMessage()).isEqualTo("Unauthenticated."); + } + + @Test(timeout = TIMEOUT) + public void unprocessableEntity() throws Exception { + final CloudConvertClientException cloudConvertClientException = catchThrowableOfType( + () -> cloudConvertAuthorizedClient.jobs().create(ImmutableMap.of()), CloudConvertClientException.class); + + assertThat(cloudConvertClientException.getStatus().getCode()).isEqualTo(HttpStatus.SC_UNPROCESSABLE_ENTITY); + assertThat(cloudConvertClientException.getStatus().getReason()).contains("Unprocessable"); + assertThat(cloudConvertClientException.getHeaders()).containsKey("Content-Type"); + assertThat(cloudConvertClientException.getBody().getCode()).isEqualTo("INVALID_DATA"); + assertThat(cloudConvertClientException.getBody().getErrors()).containsKey("tasks"); + } + + @After + public void after() throws Exception { + jpgTest1InputStream.close(); + cloudConvertUnauthorizedClient.close(); + cloudConvertAuthorizedClient.close(); + } +} diff --git a/src/test/java/com/cloudconvert/test/integration/ImportsAndExportsIntegrationTest.java b/src/test/java/com/cloudconvert/test/integration/ImportsAndExportsIntegrationTest.java index a5b5332..0bc114c 100644 --- a/src/test/java/com/cloudconvert/test/integration/ImportsAndExportsIntegrationTest.java +++ b/src/test/java/com/cloudconvert/test/integration/ImportsAndExportsIntegrationTest.java @@ -5,10 +5,12 @@ import com.cloudconvert.dto.Status; import com.cloudconvert.dto.request.AzureBlobExportRequest; import com.cloudconvert.dto.request.AzureBlobImportRequest; +import com.cloudconvert.dto.request.Base64ImportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageExportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest; import com.cloudconvert.dto.request.OpenStackExportRequest; import com.cloudconvert.dto.request.OpenStackImportRequest; +import com.cloudconvert.dto.request.RawImportRequest; import com.cloudconvert.dto.request.S3ExportRequest; import com.cloudconvert.dto.request.S3ImportRequest; import com.cloudconvert.dto.request.SftpExportRequest; @@ -63,7 +65,7 @@ public void before() throws Exception { public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { // Import upload (not immediate upload) final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest()); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -71,7 +73,7 @@ public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { // Cancel final Result cancelUploadImportTaskResponseResult = cloudConvertClient.tasks().cancel(uploadImportTaskResponse.getId()); - assertThat(cancelUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(cancelUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse cancelUploadImportTaskResponse = cancelUploadImportTaskResponseResult.getBody(); assertThat(cancelUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -81,7 +83,7 @@ public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { // Retry final Result retryUploadImportTaskResponseResult = cloudConvertClient.tasks().retry(uploadImportTaskResponse.getId()); - assertThat(retryUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(retryUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse retryUploadImportTaskResponse = retryUploadImportTaskResponseResult.getBody(); assertThat(retryUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -89,14 +91,14 @@ public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { // Upload (actual upload) final Result uploadTaskResponseResult = cloudConvertClient.importUsing().upload(retryUploadImportTaskResponseResult, jpgTest1InputStream); - assertThat(uploadTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadTaskResponse = uploadTaskResponseResult.getBody(); assertThat(uploadTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // Wait import upload final Result waitRetryUploadImportTaskResponseResult = cloudConvertClient.tasks().wait(retryUploadImportTaskResponse.getId()); - assertThat(waitRetryUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitRetryUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitRetryUploadImportTaskResponse = waitRetryUploadImportTaskResponseResult.getBody(); assertThat(waitRetryUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -108,14 +110,14 @@ public void cancelAndRetryUploadImportTaskLifecycle() throws Exception { public void uploadImportInputStreamAndExportUrlTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // Wait import upload final Result waitUploadImportTaskResponseResult = cloudConvertClient.tasks().wait(uploadImportTaskResponse.getId()); - assertThat(waitUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitUploadImportTaskResponse = waitUploadImportTaskResponseResult.getBody(); assertThat(waitUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -124,14 +126,14 @@ public void uploadImportInputStreamAndExportUrlTaskLifecycle() throws Exception // Export url final UrlExportRequest urlExportRequest = new UrlExportRequest().setInput(uploadImportTaskResponse.getId()); final Result urlExportTaskResponseResult = cloudConvertClient.exportUsing().url(urlExportRequest); - assertThat(urlExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(urlExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse urlExportTaskResponse = urlExportTaskResponseResult.getBody(); assertThat(urlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); // Wait export url final Result waitUrlExportTaskResponseResult = cloudConvertClient.tasks().wait(urlExportTaskResponse.getId()); - assertThat(waitUrlExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitUrlExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitUrlExportTaskResponse = waitUrlExportTaskResponseResult.getBody(); assertThat(waitUrlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); @@ -140,7 +142,7 @@ public void uploadImportInputStreamAndExportUrlTaskLifecycle() throws Exception // Download file final Result inputStreamResult = cloudConvertClient.files().download(waitUrlExportTaskResponse.getResult().getFiles().get(0).get("url")); - assertThat(inputStreamResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(inputStreamResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); assertThat(MimeTypes.getDefaultMimeTypes().forName(tika.detect(inputStreamResult.getBody())).getName()).isEqualTo("image/jpeg"); } @@ -148,14 +150,14 @@ public void uploadImportInputStreamAndExportUrlTaskLifecycle() throws Exception public void uploadImportFileAndExportUrlTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1File); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // Wait import upload final Result waitUploadImportTaskResponseResult = cloudConvertClient.tasks().wait(uploadImportTaskResponse.getId()); - assertThat(waitUploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitUploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitUploadImportTaskResponse = waitUploadImportTaskResponseResult.getBody(); assertThat(waitUploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -164,14 +166,14 @@ public void uploadImportFileAndExportUrlTaskLifecycle() throws Exception { // Export url final UrlExportRequest urlExportRequest = new UrlExportRequest().setInput(uploadImportTaskResponse.getId()); final Result urlExportTaskResponseResult = cloudConvertClient.exportUsing().url(urlExportRequest); - assertThat(urlExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(urlExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse urlExportTaskResponse = urlExportTaskResponseResult.getBody(); assertThat(urlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); // Wait export url final Result waitUrlExportTaskResponseResult = cloudConvertClient.tasks().wait(urlExportTaskResponse.getId()); - assertThat(waitUrlExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitUrlExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitUrlExportTaskResponse = waitUrlExportTaskResponseResult.getBody(); assertThat(waitUrlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); @@ -180,7 +182,7 @@ public void uploadImportFileAndExportUrlTaskLifecycle() throws Exception { // Donload file final Result inputStreamResult = cloudConvertClient.files().download(waitUrlExportTaskResponse.getResult().getFiles().get(0).get("url")); - assertThat(inputStreamResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(inputStreamResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); assertThat(MimeTypes.getDefaultMimeTypes().forName(tika.detect(inputStreamResult.getBody())).getName()).isEqualTo("image/jpeg"); } @@ -193,7 +195,7 @@ public void importTasksCreation() throws Exception { // Import url final UrlImportRequest urlImportRequest = new UrlImportRequest().setUrl("http://some-url.com").setFilename("some-filename.jpg"); final Result urlImportTaskResponseResult = cloudConvertClient.importUsing().url(urlImportRequest); - assertThat(urlImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(urlImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse urlImportTaskResponse = urlImportTaskResponseResult.getBody(); assertThat(urlImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_URL); @@ -201,7 +203,7 @@ public void importTasksCreation() throws Exception { // Import upload final UploadImportRequest uploadImportRequest = new UploadImportRequest(); final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(uploadImportRequest); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -210,7 +212,7 @@ public void importTasksCreation() throws Exception { final S3ImportRequest s3ImportRequest = new S3ImportRequest().setBucket("some-bucket").setRegion("some-region") .setAccessKeyId("some-access-key-id").setSecretAccessKey("some-secret-access-key").setKey("some-key"); final Result s3ImportTaskResponseResult = cloudConvertClient.importUsing().s3(s3ImportRequest); - assertThat(s3ImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(s3ImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse s3ImportTaskResponse = s3ImportTaskResponseResult.getBody(); assertThat(s3ImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_S3); @@ -219,7 +221,7 @@ public void importTasksCreation() throws Exception { final AzureBlobImportRequest azureBlobImportRequest = new AzureBlobImportRequest().setStorageAccount("some-storage-account") .setStorageAccessKey("some-storage-access-key").setContainer("some-container").setBlob("some-blob"); final Result azureBlobImportTaskResponseResult = cloudConvertClient.importUsing().azureBlob(azureBlobImportRequest); - assertThat(azureBlobImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(azureBlobImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse azureBlobImportTaskResponse = azureBlobImportTaskResponseResult.getBody(); assertThat(azureBlobImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_AZURE_BLOB); @@ -229,7 +231,7 @@ public void importTasksCreation() throws Exception { .setProjectId("some-project-id").setBucket("some-bucket").setClientEmail("some-client-email") .setPrivateKey("some-private-key").setFile("some-file"); final Result googleCloudStorageImportTaskResponseResult = cloudConvertClient.importUsing().googleCloudStorage(googleCloudStorageImportRequest); - assertThat(googleCloudStorageImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(googleCloudStorageImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse googleCloudStorageImportTaskResponse = googleCloudStorageImportTaskResponseResult.getBody(); assertThat(googleCloudStorageImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_GOOGLE_CLOUD_STORAGE); @@ -239,7 +241,7 @@ public void importTasksCreation() throws Exception { .setAuthUrl("some-auth-url").setUsername("some-username").setPassword("some-password") .setRegion("some-region").setContainer("some-container").setFile("some-file"); final Result openStackImportTaskResponseResult = cloudConvertClient.importUsing().openStack(openStackImportRequest); - assertThat(openStackImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(openStackImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse openStackImportTaskResponse = openStackImportTaskResponseResult.getBody(); assertThat(openStackImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_OPENSTACK); @@ -248,10 +250,27 @@ public void importTasksCreation() throws Exception { final SftpImportRequest sftpImportRequest = new SftpImportRequest().setHost("some-host").setUsername("some-username") .setPassword("some-password").setFile("some-file"); final Result sftpImportTaskResponseResult = cloudConvertClient.importUsing().sftp(sftpImportRequest); - assertThat(sftpImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(sftpImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse sftpImportTaskResponse = sftpImportTaskResponseResult.getBody(); assertThat(sftpImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_SFTP); + + // Import Base64 + final Base64ImportRequest base64ImportRequest = new Base64ImportRequest().setFile("dGVzdDEyMw==").setFilename("test.txt"); + final Result base64ImportTaskResponseResult = cloudConvertClient.importUsing().base64(base64ImportRequest); + assertThat(base64ImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse base64ImportTaskResponse = base64ImportTaskResponseResult.getBody(); + assertThat(base64ImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_BASE64); + + // Import Raw + final RawImportRequest rawImportRequest = new RawImportRequest().setFile("content").setFilename("test.txt"); + final Result rawImportTaskResponseResult = cloudConvertClient.importUsing().raw(rawImportRequest); + assertThat(rawImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse rawImportTaskResponse = rawImportTaskResponseResult.getBody(); + assertThat(rawImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_RAW); + } /** @@ -262,7 +281,7 @@ public void importTasksCreation() throws Exception { public void exportTasksCreation() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -270,7 +289,7 @@ public void exportTasksCreation() throws Exception { // Export url final UrlExportRequest urlExportRequest = new UrlExportRequest().setInput(uploadImportTaskResponse.getId()); final Result urlExportTaskResponseResult = cloudConvertClient.exportUsing().url(urlExportRequest); - assertThat(urlExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(urlExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse urlExportTaskResponse = urlExportTaskResponseResult.getBody(); assertThat(urlExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_URL); @@ -280,7 +299,7 @@ public void exportTasksCreation() throws Exception { .setBucket("some-bucket").setRegion("some-region").setAccessKeyId("some-access-key-id") .setSecretAccessKey("some-secret-access-key").setKey("some-key"); final Result s3ExportTaskResponseResult = cloudConvertClient.exportUsing().s3(s3ExportRequest); - assertThat(s3ExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(s3ExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse s3ExportTaskResponse = s3ExportTaskResponseResult.getBody(); assertThat(s3ExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_S3); @@ -290,7 +309,7 @@ public void exportTasksCreation() throws Exception { .setInput(uploadImportTaskResponse.getId()).setStorageAccount("some-storage-account") .setStorageAccessKey("some-storage-access-key").setContainer("some-container").setBlob("some-blob"); final Result azureBlobExportTaskResponseResult = cloudConvertClient.exportUsing().azureBlob(azureBlobExportRequest); - assertThat(azureBlobExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(azureBlobExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse azureBlobExportTaskResponse = azureBlobExportTaskResponseResult.getBody(); assertThat(azureBlobExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_AZURE_BLOB); @@ -300,7 +319,7 @@ public void exportTasksCreation() throws Exception { .setInput(uploadImportTaskResponse.getId()).setProjectId("some-project-id") .setBucket("some-bucket").setClientEmail("some-client-email").setPrivateKey("some-private-key").setFile("some-file"); final Result googleCloudStorageExportTaskResponseResult = cloudConvertClient.exportUsing().googleCloudStorage(googleCloudStorageExportRequest); - assertThat(googleCloudStorageExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(googleCloudStorageExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse googleCloudStorageExportTaskResponse = googleCloudStorageExportTaskResponseResult.getBody(); assertThat(googleCloudStorageExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_GOOGLE_CLOUD_STORAGE); @@ -310,7 +329,7 @@ public void exportTasksCreation() throws Exception { .setInput(uploadImportTaskResponse.getId()).setAuthUrl("some-auth-url").setUsername("some-username") .setPassword("some-password").setRegion("some-region").setContainer("some-container").setFile("some-file"); final Result openStackExportTaskResponseResult = cloudConvertClient.exportUsing().openStack(openStackExportRequest); - assertThat(openStackExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(openStackExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse openStackExportTaskResponse = openStackExportTaskResponseResult.getBody(); assertThat(openStackExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_OPENSTACK); @@ -319,7 +338,7 @@ public void exportTasksCreation() throws Exception { final SftpExportRequest sftpExportRequest = new SftpExportRequest().setInput(uploadImportTaskResponse.getId()) .setHost("some-host").setUsername("some-username").setPassword("some-password").setFile("some-file"); final Result sftpExportTaskResponseResult = cloudConvertClient.exportUsing().sftp(sftpExportRequest); - assertThat(sftpExportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(sftpExportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse sftpExportTaskResponse = sftpExportTaskResponseResult.getBody(); assertThat(sftpExportTaskResponse.getOperation()).isEqualTo(Operation.EXPORT_SFTP); diff --git a/src/test/java/com/cloudconvert/test/integration/JobsIntegrationTest.java b/src/test/java/com/cloudconvert/test/integration/JobsIntegrationTest.java index 7f415e0..e7bf693 100644 --- a/src/test/java/com/cloudconvert/test/integration/JobsIntegrationTest.java +++ b/src/test/java/com/cloudconvert/test/integration/JobsIntegrationTest.java @@ -72,7 +72,7 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Create job final Result jobResponseResult = cloudConvertClient.jobs().create(tasks); - assertThat(jobResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(jobResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final JobResponse jobResponse = jobResponseResult.getBody(); assertThat(jobResponse.getTasks()).hasSize(3); @@ -91,7 +91,7 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Upload (actual upload file 1) final Result uploadFile1TaskResponseResult = cloudConvertClient.importUsing() .upload(uploadFile1TaskJobResponse.getId(), uploadFile1TaskJobResponse.getResult().getForm(), odtTest1InputStream); - assertThat(uploadFile1TaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadFile1TaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadFile1TaskResponse = uploadFile1TaskResponseResult.getBody(); assertThat(uploadFile1TaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -99,14 +99,14 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Upload (actual upload file 2) final Result uploadFile2TaskResponseResult = cloudConvertClient.importUsing() .upload(uploadFile2TaskJobResponse.getId(), uploadFile2TaskJobResponse.getResult().getForm(), odtTest2InputStream); - assertThat(uploadFile2TaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadFile2TaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadFile2TaskResponse = uploadFile2TaskResponseResult.getBody(); assertThat(uploadFile2TaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // Wait final Result waitJobResponseResult = cloudConvertClient.jobs().wait(jobResponse.getId()); - assertThat(waitJobResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitJobResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final JobResponse waitJobResponse = waitJobResponseResult.getBody(); assertThat(waitJobResponse.getStatus()).isEqualTo(Status.FINISHED); @@ -114,7 +114,7 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Show final Result showJobResponseResult = cloudConvertClient.jobs().show(jobResponse.getId()); - assertThat(showJobResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showJobResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final JobResponse showJobResponse = showJobResponseResult.getBody(); assertThat(showJobResponse.getStatus()).isEqualTo(Status.FINISHED); @@ -122,14 +122,14 @@ mergeFile1AndFile2TaskName, new MergeFilesTaskRequest().setOutputFormat(PDF).set // Delete job final Result deleteVoidResult = cloudConvertClient.jobs().delete(jobResponse.getId()); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) public void listJobsLifecycle() throws Exception { // List jobs final Result> jobResponsePageable = cloudConvertClient.jobs().list(ImmutableMap.of(), ImmutableList.of(), new Pagination(10, 1)); - assertThat(jobResponsePageable.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(jobResponsePageable.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); } @After diff --git a/src/test/java/com/cloudconvert/test/integration/TasksIntegrationTest.java b/src/test/java/com/cloudconvert/test/integration/TasksIntegrationTest.java index f6d4d8e..ccaa1d7 100644 --- a/src/test/java/com/cloudconvert/test/integration/TasksIntegrationTest.java +++ b/src/test/java/com/cloudconvert/test/integration/TasksIntegrationTest.java @@ -3,12 +3,7 @@ import com.cloudconvert.client.CloudConvertClient; import com.cloudconvert.dto.Operation; import com.cloudconvert.dto.Status; -import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; -import com.cloudconvert.dto.request.ConvertFilesTaskRequest; -import com.cloudconvert.dto.request.CreateArchivesTaskRequest; -import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; -import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; -import com.cloudconvert.dto.request.UploadImportRequest; +import com.cloudconvert.dto.request.*; import com.cloudconvert.dto.response.OperationResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; @@ -27,6 +22,7 @@ import org.junit.runners.JUnit4; import java.io.InputStream; +import java.util.HashMap; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -58,14 +54,14 @@ public void before() throws Exception { public void convertFileTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); // List convert formats final Result> convertFormatsOperationResponsePageableResult = cloudConvertClient.tasks().convertFormats(); - assertThat(convertFormatsOperationResponsePageableResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(convertFormatsOperationResponsePageableResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final List operationResponses = convertFormatsOperationResponsePageableResult.getBody().getData(); assertThat(operationResponses).anySatisfy(operationResponse -> assertThat(operationResponse.getOutputFormat()).isEqualTo(JPG)); @@ -73,14 +69,14 @@ public void convertFileTaskLifecycle() throws Exception { // Convert final ConvertFilesTaskRequest convertFilesTaskRequest = new ConvertFilesTaskRequest().setInput(uploadImportTaskResponse.getId()).setInputFormat(JPG).setOutputFormat(PNG); final Result convertTaskResponseResult = cloudConvertClient.tasks().convert(convertFilesTaskRequest); - assertThat(convertTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(convertTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse convertTaskResponse = convertTaskResponseResult.getBody(); assertThat(convertTaskResponse.getOperation()).isEqualTo(Operation.CONVERT); // Wait final Result waitConvertTaskResponseResult = cloudConvertClient.tasks().wait(convertTaskResponse.getId()); - assertThat(waitConvertTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitConvertTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitConvertTaskResponse = waitConvertTaskResponseResult.getBody(); assertThat(waitConvertTaskResponse.getOperation()).isEqualTo(Operation.CONVERT); @@ -89,7 +85,7 @@ public void convertFileTaskLifecycle() throws Exception { // Show final Result showConvertTaskResponseResult = cloudConvertClient.tasks().show(convertTaskResponse.getId()); - assertThat(showConvertTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showConvertTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showConvertTaskResponse = showConvertTaskResponseResult.getBody(); assertThat(showConvertTaskResponse.getOperation()).isEqualTo(Operation.CONVERT); @@ -98,14 +94,14 @@ public void convertFileTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = cloudConvertClient.tasks().delete(convertTaskResponse.getId()); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) public void optimizeFileTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -113,14 +109,14 @@ public void optimizeFileTaskLifecycle() throws Exception { // Optimize final OptimizeFilesTaskRequest optimizeFilesTaskRequest = new OptimizeFilesTaskRequest().setInput(uploadImportTaskResponse.getId()).setInputFormat(JPG); final Result optimizeTaskResponseResult = cloudConvertClient.tasks().optimize(optimizeFilesTaskRequest); - assertThat(optimizeTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(optimizeTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse optimizeTaskResponse = optimizeTaskResponseResult.getBody(); assertThat(optimizeTaskResponse.getOperation()).isEqualTo(Operation.OPTIMIZE); // Wait final Result waitOptimizeTaskResponseResult = cloudConvertClient.tasks().wait(optimizeTaskResponse.getId()); - assertThat(waitOptimizeTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitOptimizeTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitOptimizeTaskResponse = waitOptimizeTaskResponseResult.getBody(); assertThat(waitOptimizeTaskResponse.getOperation()).isEqualTo(Operation.OPTIMIZE); @@ -129,7 +125,7 @@ public void optimizeFileTaskLifecycle() throws Exception { // Show final Result showOptimizeTaskResponseResult = cloudConvertClient.tasks().show(optimizeTaskResponse.getId()); - assertThat(showOptimizeTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showOptimizeTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showOptimizeTaskResponse = showOptimizeTaskResponseResult.getBody(); assertThat(showOptimizeTaskResponse.getOperation()).isEqualTo(Operation.OPTIMIZE); @@ -138,7 +134,7 @@ public void optimizeFileTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = cloudConvertClient.tasks().delete(optimizeTaskResponse.getId()); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) @@ -146,14 +142,14 @@ public void captureWebsiteTaskLifecycle() throws Exception { // Capture final CaptureWebsitesTaskRequest captureWebsitesTaskRequest = new CaptureWebsitesTaskRequest().setUrl(URL).setOutputFormat(PDF); final Result captureTaskResponseResult = cloudConvertClient.tasks().capture(captureWebsitesTaskRequest); - assertThat(captureTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(captureTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse captureTaskResponse = captureTaskResponseResult.getBody(); assertThat(captureTaskResponse.getOperation()).isEqualTo(Operation.CAPTURE_WEBSITE); // Wait final Result waitCaptureTaskResponseResult = cloudConvertClient.tasks().wait(captureTaskResponse.getId()); - assertThat(waitCaptureTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitCaptureTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitCaptureTaskResponse = waitCaptureTaskResponseResult.getBody(); assertThat(waitCaptureTaskResponse.getOperation()).isEqualTo(Operation.CAPTURE_WEBSITE); @@ -162,7 +158,7 @@ public void captureWebsiteTaskLifecycle() throws Exception { // Show final Result showCaptureTaskResponseResult = cloudConvertClient.tasks().show(captureTaskResponse.getId()); - assertThat(showCaptureTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showCaptureTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showCaptureTaskResponse = showCaptureTaskResponseResult.getBody(); assertThat(showCaptureTaskResponse.getOperation()).isEqualTo(Operation.CAPTURE_WEBSITE); @@ -171,14 +167,14 @@ public void captureWebsiteTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = cloudConvertClient.tasks().delete(captureTaskResponse.getId()); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) public void createArchiveTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -186,14 +182,14 @@ public void createArchiveTaskLifecycle() throws Exception { // Archive final CreateArchivesTaskRequest createArchivesTaskRequest = new CreateArchivesTaskRequest().setInput(uploadImportTaskResponse.getId()).setOutputFormat(ZIP); final Result archiveTaskResponseResult = cloudConvertClient.tasks().archive(createArchivesTaskRequest); - assertThat(archiveTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(archiveTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse archiveTaskResponse = archiveTaskResponseResult.getBody(); assertThat(archiveTaskResponse.getOperation()).isEqualTo(Operation.ARCHIVE); // Wait final Result waitArchiveTaskResponseResult = cloudConvertClient.tasks().wait(archiveTaskResponse.getId()); - assertThat(waitArchiveTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitArchiveTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitArchiveTaskResponse = waitArchiveTaskResponseResult.getBody(); assertThat(waitArchiveTaskResponse.getOperation()).isEqualTo(Operation.ARCHIVE); @@ -202,7 +198,7 @@ public void createArchiveTaskLifecycle() throws Exception { // Show final Result showArchiveTaskResponseResult = cloudConvertClient.tasks().show(archiveTaskResponse.getId()); - assertThat(showArchiveTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showArchiveTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showArchiveTaskResponse = showArchiveTaskResponseResult.getBody(); assertThat(showArchiveTaskResponse.getOperation()).isEqualTo(Operation.ARCHIVE); @@ -211,14 +207,14 @@ public void createArchiveTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = cloudConvertClient.tasks().delete(archiveTaskResponse.getId()); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } @Test(timeout = TIMEOUT) public void executeCommandTaskLifecycle() throws Exception { // Import upload (immediate upload) final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); - assertThat(uploadImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); @@ -228,14 +224,14 @@ public void executeCommandTaskLifecycle() throws Exception { .setInput(uploadImportTaskResponse.getId()).setEngine(ExecuteCommandsTaskRequest.Engine.GRAPHICSMAGICK) .setCommand(ExecuteCommandsTaskRequest.Command.GM).setArguments("version"); final Result executeTaskResponseResult = cloudConvertClient.tasks().command(executeCommandsTaskRequest); - assertThat(executeTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(executeTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); final TaskResponse executeTaskResponse = executeTaskResponseResult.getBody(); assertThat(executeTaskResponse.getOperation()).isEqualTo(Operation.COMMAND); // Wait final Result waitExecuteTaskResponseResult = cloudConvertClient.tasks().wait(executeTaskResponse.getId()); - assertThat(waitExecuteTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(waitExecuteTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse waitExecuteTaskResponse = waitExecuteTaskResponseResult.getBody(); assertThat(waitExecuteTaskResponse.getOperation()).isEqualTo(Operation.COMMAND); @@ -244,7 +240,7 @@ public void executeCommandTaskLifecycle() throws Exception { // Show final Result showExecuteTaskResponseResult = cloudConvertClient.tasks().show(executeTaskResponse.getId()); - assertThat(showExecuteTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(showExecuteTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); final TaskResponse showExecuteTaskResponse = showExecuteTaskResponseResult.getBody(); assertThat(showExecuteTaskResponse.getOperation()).isEqualTo(Operation.COMMAND); @@ -253,18 +249,186 @@ public void executeCommandTaskLifecycle() throws Exception { // Delete final Result deleteVoidResult = cloudConvertClient.tasks().delete(executeTaskResponse.getId()); - assertThat(deleteVoidResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); } + @Test(timeout = TIMEOUT) + public void thumbnailFileTaskLifecycle() throws Exception { + // Import upload (immediate upload) + final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); + assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); + + // Thumbnail + final CreateThumbnailsTaskRequest createThumbnailsTaskRequest = new CreateThumbnailsTaskRequest().setInput(uploadImportTaskResponse.getId()).setInputFormat(JPG).setOutputFormat(PNG); + final Result thumbnailTaskResponseResult = cloudConvertClient.tasks().thumbnail(createThumbnailsTaskRequest); + assertThat(thumbnailTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse thumbnailTaskResponse = thumbnailTaskResponseResult.getBody(); + assertThat(thumbnailTaskResponse.getOperation()).isEqualTo(Operation.THUMBNAIL); + + // Wait + final Result waitThumbnailTaskResponseResult = cloudConvertClient.tasks().wait(thumbnailTaskResponse.getId()); + assertThat(waitThumbnailTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse waitThumbnailTaskResponse = waitThumbnailTaskResponseResult.getBody(); + assertThat(waitThumbnailTaskResponse.getOperation()).isEqualTo(Operation.THUMBNAIL); + assertThat(waitThumbnailTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(waitThumbnailTaskResponse.getId()).isEqualTo(thumbnailTaskResponse.getId()); + + // Show + final Result showThumbnailTaskResponseResult = cloudConvertClient.tasks().show(thumbnailTaskResponse.getId()); + assertThat(showThumbnailTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse showThumbnailTaskResponse = showThumbnailTaskResponseResult.getBody(); + assertThat(showThumbnailTaskResponse.getOperation()).isEqualTo(Operation.THUMBNAIL); + assertThat(showThumbnailTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(showThumbnailTaskResponse.getId()).isEqualTo(thumbnailTaskResponse.getId()); + + // Delete + final Result deleteVoidResult = cloudConvertClient.tasks().delete(thumbnailTaskResponse.getId()); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); + } + + + @Test(timeout = TIMEOUT) + public void getMetadataTaskLifecycle() throws Exception { + // Import upload (immediate upload) + final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); + assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); + + // Metadata + final GetMetadataTaskRequest getMetadataTaskRequest = new GetMetadataTaskRequest().setInput(uploadImportTaskResponse.getId()).setInputFormat(JPG); + final Result metadataTaskResponseResult = cloudConvertClient.tasks().metadata(getMetadataTaskRequest); + assertThat(metadataTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse metadataTaskResponse = metadataTaskResponseResult.getBody(); + assertThat(metadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA); + + // Wait + final Result waitMetadataTaskResponseResult = cloudConvertClient.tasks().wait(metadataTaskResponse.getId()); + assertThat(waitMetadataTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse waitMetadataTaskResponse = waitMetadataTaskResponseResult.getBody(); + assertThat(waitMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA); + assertThat(waitMetadataTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(waitMetadataTaskResponse.getId()).isEqualTo(metadataTaskResponse.getId()); + + // Show + final Result showMetadataTaskResponseResult = cloudConvertClient.tasks().show(metadataTaskResponse.getId()); + assertThat(showMetadataTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse showMetadataTaskResponse = showMetadataTaskResponseResult.getBody(); + assertThat(showMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA); + assertThat(showMetadataTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(showMetadataTaskResponse.getId()).isEqualTo(metadataTaskResponse.getId()); + assertThat(showMetadataTaskResponse.getResult().getMetadata()).isNotEmpty(); + + // Delete + final Result deleteVoidResult = cloudConvertClient.tasks().delete(metadataTaskResponse.getId()); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); + } + + + @Test(timeout = TIMEOUT) + public void writeMetadataTaskLifecycle() throws Exception { + // Import upload (immediate upload) + final Result uploadImportTaskResponseResult = cloudConvertClient.importUsing().upload(new UploadImportRequest(), jpgTest1InputStream); + assertThat(uploadImportTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse uploadImportTaskResponse = uploadImportTaskResponseResult.getBody(); + assertThat(uploadImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_UPLOAD); + + // Write Metadata + final WriteMetadataTaskRequest writeMetadataTaskRequest = new WriteMetadataTaskRequest() + .setInput(uploadImportTaskResponse.getId()) + .setInputFormat(JPG) + .setMetadata(new HashMap() {{ + put("Author", "CloudConvert"); + }}); + final Result writeMetadataTaskResponseResult = cloudConvertClient.tasks().writeMetadata(writeMetadataTaskRequest); + assertThat(writeMetadataTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse writeMetadataTaskResponse = writeMetadataTaskResponseResult.getBody(); + assertThat(writeMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA_WRITE); + + // Wait + final Result waitWriteMetadataTaskResponseResult = cloudConvertClient.tasks().wait(writeMetadataTaskResponse.getId()); + assertThat(waitWriteMetadataTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse waitWriteMetadataTaskResponse = waitWriteMetadataTaskResponseResult.getBody(); + assertThat(waitWriteMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA_WRITE); + assertThat(waitWriteMetadataTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(waitWriteMetadataTaskResponse.getId()).isEqualTo(writeMetadataTaskResponse.getId()); + + // Show + final Result showWriteMetadataTaskResponseResult = cloudConvertClient.tasks().show(writeMetadataTaskResponse.getId()); + assertThat(showWriteMetadataTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse showWriteMetadataTaskResponse = showWriteMetadataTaskResponseResult.getBody(); + assertThat(showWriteMetadataTaskResponse.getOperation()).isEqualTo(Operation.METADATA_WRITE); + assertThat(showWriteMetadataTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(showWriteMetadataTaskResponse.getId()).isEqualTo(writeMetadataTaskResponse.getId()); + + // Delete + final Result deleteVoidResult = cloudConvertClient.tasks().delete(writeMetadataTaskResponse.getId()); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); + } + + + @Test(timeout = TIMEOUT) + public void watermarkFileTaskLifecycle() throws Exception { + + // Watermark + final AddWatermarkTaskRequest addWatermarkTaskRequest = new AddWatermarkTaskRequest() + .setInputFormat(JPG) + .setProperty("text", "Hello World"); + final Result watermarkTaskResponseResult = cloudConvertClient.tasks().watermark(addWatermarkTaskRequest); + assertThat(watermarkTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); + + final TaskResponse watermarkTaskResponse = watermarkTaskResponseResult.getBody(); + assertThat(watermarkTaskResponse.getOperation()).isEqualTo(Operation.WATERMARK); + + // Wait + final Result waitWatermarkTaskResponseResult = cloudConvertClient.tasks().wait(watermarkTaskResponse.getId()); + assertThat(waitWatermarkTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse waitWatermarkTaskResponse = waitWatermarkTaskResponseResult.getBody(); + assertThat(waitWatermarkTaskResponse.getOperation()).isEqualTo(Operation.WATERMARK); + assertThat(waitWatermarkTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(waitWatermarkTaskResponse.getId()).isEqualTo(watermarkTaskResponse.getId()); + + // Show + final Result showWatermarkTaskResponseResult = cloudConvertClient.tasks().show(watermarkTaskResponse.getId()); + assertThat(showWatermarkTaskResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); + + final TaskResponse showWatermarkTaskResponse = showWatermarkTaskResponseResult.getBody(); + assertThat(showWatermarkTaskResponse.getOperation()).isEqualTo(Operation.WATERMARK); + assertThat(showWatermarkTaskResponse.getStatus()).isEqualTo(Status.FINISHED); + assertThat(showWatermarkTaskResponse.getId()).isEqualTo(watermarkTaskResponse.getId()); + + // Delete + final Result deleteVoidResult = cloudConvertClient.tasks().delete(watermarkTaskResponse.getId()); + assertThat(deleteVoidResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); + } + + + @Test(timeout = TIMEOUT) public void listTasksLifecycle() throws Exception { // List operations - final Result> operationResponsePageable = cloudConvertClient.tasks().operations(); - assertThat(operationResponsePageable.getStatus()).isEqualTo(HttpStatus.SC_OK); + // Currently disabled because they are some unsupported operations + //final Result> operationResponsePageable = cloudConvertClient.tasks().operations(); + //assertThat(operationResponsePageable.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); // List tasks final Result> taskResponsePageable = cloudConvertClient.tasks().list(ImmutableMap.of(), ImmutableList.of(), new Pagination(100, 1)); - assertThat(taskResponsePageable.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(taskResponsePageable.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); } @After diff --git a/src/test/java/com/cloudconvert/test/integration/WebhooksIntegrationTest.java b/src/test/java/com/cloudconvert/test/integration/WebhooksIntegrationTest.java index 9306d1f..388611e 100644 --- a/src/test/java/com/cloudconvert/test/integration/WebhooksIntegrationTest.java +++ b/src/test/java/com/cloudconvert/test/integration/WebhooksIntegrationTest.java @@ -37,7 +37,7 @@ public void before() throws Exception { @Test(timeout = TIMEOUT) public void userLifecycle() throws Exception { final Result userResponseResult = cloudConvertClient.users().me(); - assertThat(userResponseResult.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(userResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); assertThat(userResponseResult.getBody()).isNotNull(); } @@ -47,7 +47,7 @@ public void webhooksLifecycle() throws Exception { final WebhookRequest webhookRequest = new WebhookRequest().setUrl("http://some-url.com") .setEvents(ImmutableList.of(Event.JOB_CREATED, Event.JOB_FAILED, Event.JOB_FINISHED)); final Result createWebhookResponseResult = cloudConvertClient.webhooks().create(webhookRequest); - assertThat(createWebhookResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED); + assertThat(createWebhookResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_CREATED); assertThat(createWebhookResponseResult.getBody()).isNotNull(); final WebhookResponse createWebhookResponse = createWebhookResponseResult.getBody(); @@ -55,11 +55,11 @@ public void webhooksLifecycle() throws Exception { // List final Result> webhookResponsePageable = cloudConvertClient.webhooks().list(); - assertThat(webhookResponsePageable.getStatus()).isEqualTo(HttpStatus.SC_OK); + assertThat(webhookResponsePageable.getStatus().getCode()).isEqualTo(HttpStatus.SC_OK); // Delete final Result deleteWebhookResponseResult = cloudConvertClient.webhooks().delete(createWebhookResponse.getId()); - assertThat(deleteWebhookResponseResult.getStatus()).isEqualTo(HttpStatus.SC_NO_CONTENT); + assertThat(deleteWebhookResponseResult.getStatus().getCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); // Verify assertThat(cloudConvertClient.webhooks().verify(WEBHOOK_PAYLOAD, WEBHOOK_SIGNATURE)).isTrue(); diff --git a/src/test/java/com/cloudconvert/test/unit/AsyncImportsUnitTest.java b/src/test/java/com/cloudconvert/test/unit/AsyncImportsUnitTest.java index 4299bf5..8c75dac 100644 --- a/src/test/java/com/cloudconvert/test/unit/AsyncImportsUnitTest.java +++ b/src/test/java/com/cloudconvert/test/unit/AsyncImportsUnitTest.java @@ -4,8 +4,10 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.request.AzureBlobImportRequest; +import com.cloudconvert.dto.request.Base64ImportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest; import com.cloudconvert.dto.request.OpenStackImportRequest; +import com.cloudconvert.dto.request.RawImportRequest; import com.cloudconvert.dto.request.S3ImportRequest; import com.cloudconvert.dto.request.SftpImportRequest; import com.cloudconvert.dto.request.UploadImportRequest; @@ -15,6 +17,7 @@ import com.cloudconvert.dto.result.CompletedAsyncResult; import com.cloudconvert.dto.result.FutureAsyncResult; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.dto.result.Status; import com.cloudconvert.executor.AsyncRequestExecutor; import com.cloudconvert.resource.AbstractResource; import com.cloudconvert.test.framework.AbstractTest; @@ -138,10 +141,10 @@ public void import_upload_immediateUpload() throws Exception { final AsyncResult showTaskResponseAsyncResult = FutureAsyncResult.builder().build(); when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))) .thenReturn(CompletedAsyncResult.builder().result( - Result.builder().status(HttpStatus.SC_CREATED).body(taskResponse).build()).build()) + Result.builder().status(Status.builder().code(HttpStatus.SC_CREATED).build()).body(taskResponse).build()).build()) .thenReturn(showTaskResponseAsyncResult); when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.VOID_TYPE_REFERENCE))).thenReturn( - CompletedAsyncResult.builder().result(Result.builder().status(HttpStatus.SC_CREATED).build()).build()); + CompletedAsyncResult.builder().result(Result.builder().status(Status.builder().code(HttpStatus.SC_CREATED).build()).build()).build()); assertThat(asyncCloudConvertClient.importUsing().upload(expectedUploadImportRequest, inputStream)).isEqualTo(showTaskResponseAsyncResult); verify(asyncRequestExecutor, times(2)).execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); @@ -153,7 +156,7 @@ public void import_upload_immediateUpload() throws Exception { assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); assertThat(httpUriRequest.getURI().toString()).isEqualTo(taskResponse.getResult().getForm().getUrl()); assertThat(httpUriRequest).isInstanceOf(HttpRequestBase.class); - assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(0).allSatisfy(header -> assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); @@ -289,6 +292,58 @@ public void import_sftp() throws Exception { assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); } + @Test + public void import_base64() throws Exception { + final Base64ImportRequest expectedBase64ImportRequest = new Base64ImportRequest().setFile("some-file").setFilename("test.txt"); + final AsyncResult taskResponseAsyncResult = FutureAsyncResult.builder().build(); + + when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseAsyncResult); + assertThat(asyncCloudConvertClient.importUsing().base64(expectedBase64ImportRequest)).isEqualTo(taskResponseAsyncResult); + verify(asyncRequestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/import/base64"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final Base64ImportRequest actualBase64ImportRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), Base64ImportRequest.class)).get(); + + assertThat(actualBase64ImportRequest.getFilename()).isEqualTo(actualBase64ImportRequest.getFilename()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + @Test + public void import_raw() throws Exception { + final RawImportRequest expectedRawImportRequest = new RawImportRequest().setFile("content").setFilename("test.txt"); + final AsyncResult taskResponseAsyncResult = FutureAsyncResult.builder().build(); + + when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseAsyncResult); + assertThat(asyncCloudConvertClient.importUsing().raw(expectedRawImportRequest)).isEqualTo(taskResponseAsyncResult); + verify(asyncRequestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/import/raw"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final RawImportRequest actualRawImportRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), RawImportRequest.class)).get(); + + assertThat(actualRawImportRequest.getFilename()).isEqualTo(actualRawImportRequest.getFilename()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + @After public void after() throws Exception { asyncCloudConvertClient.close(); diff --git a/src/test/java/com/cloudconvert/test/unit/AsyncJobsUnitTest.java b/src/test/java/com/cloudconvert/test/unit/AsyncJobsUnitTest.java index 85b2682..f825623 100644 --- a/src/test/java/com/cloudconvert/test/unit/AsyncJobsUnitTest.java +++ b/src/test/java/com/cloudconvert/test/unit/AsyncJobsUnitTest.java @@ -77,6 +77,7 @@ public class AsyncJobsUnitTest extends AbstractTest { public void before() { when(settingsProvider.getApiKey()).thenReturn(API_KEY); when(settingsProvider.getApiUrl()).thenReturn(API_URL); + when(settingsProvider.getSyncApiUrl()).thenReturn(API_SYNC_URL); asyncCloudConvertClient = new AsyncCloudConvertClient(settingsProvider, objectMapperProvider, asyncRequestExecutor); } @@ -152,7 +153,7 @@ public void jobs_wait() throws Exception { assertThat(httpUriRequest).isNotNull(); assertThat(httpUriRequest.getMethod()).isEqualTo(HttpGet.METHOD_NAME); - assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/jobs/" + JOB_ID + "/wait"); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_SYNC_URL + "/" + AbstractResource.V2 + "/jobs/" + JOB_ID); assertThat(httpUriRequest).isInstanceOf(HttpRequestBase.class); assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); diff --git a/src/test/java/com/cloudconvert/test/unit/AsyncTasksUnitTest.java b/src/test/java/com/cloudconvert/test/unit/AsyncTasksUnitTest.java index b44bb03..c10f410 100644 --- a/src/test/java/com/cloudconvert/test/unit/AsyncTasksUnitTest.java +++ b/src/test/java/com/cloudconvert/test/unit/AsyncTasksUnitTest.java @@ -3,12 +3,7 @@ import com.cloudconvert.client.AsyncCloudConvertClient; import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; -import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; -import com.cloudconvert.dto.request.ConvertFilesTaskRequest; -import com.cloudconvert.dto.request.CreateArchivesTaskRequest; -import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; -import com.cloudconvert.dto.request.MergeFilesTaskRequest; -import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; +import com.cloudconvert.dto.request.*; import com.cloudconvert.dto.response.OperationResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; @@ -75,6 +70,7 @@ public class AsyncTasksUnitTest extends AbstractTest { public void before() { when(settingsProvider.getApiKey()).thenReturn(API_KEY); when(settingsProvider.getApiUrl()).thenReturn(API_URL); + when(settingsProvider.getSyncApiUrl()).thenReturn(API_SYNC_URL); asyncCloudConvertClient = new AsyncCloudConvertClient(settingsProvider, objectMapperProvider, asyncRequestExecutor); } @@ -134,7 +130,7 @@ public void tasks_wait() throws Exception { assertThat(httpUriRequest).isNotNull(); assertThat(httpUriRequest.getMethod()).isEqualTo(HttpGet.METHOD_NAME); - assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/tasks/" + TASK_ID + "/wait"); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_SYNC_URL + "/" + AbstractResource.V2 + "/tasks/" + TASK_ID); assertThat(httpUriRequest).isInstanceOf(HttpRequestBase.class); assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); @@ -497,6 +493,113 @@ public void tasks_command() throws Exception { assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); } + @Test + public void tasks_thumbnail() throws Exception { + final CreateThumbnailsTaskRequest expectedCreateThumbnailsTaskRequest = new CreateThumbnailsTaskRequest().setInput("execute-commands-task-input"); + final AsyncResult taskResponseAsyncResult = FutureAsyncResult.builder().build(); + when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseAsyncResult); + + assertThat(asyncCloudConvertClient.tasks().thumbnail(expectedCreateThumbnailsTaskRequest)).isEqualTo(taskResponseAsyncResult); + verify(asyncRequestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/thumbnail"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final CreateThumbnailsTaskRequest actualCreateThumbnailsTaskRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), CreateThumbnailsTaskRequest.class)).get(); + + assertThat(actualCreateThumbnailsTaskRequest.getInput()).isEqualTo(expectedCreateThumbnailsTaskRequest.getInput()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + + @Test + public void tasks_metadata() throws Exception { + final GetMetadataTaskRequest expectedGetMetadataTaskRequest = new GetMetadataTaskRequest().setInput("execute-commands-task-input"); + final AsyncResult taskResponseAsyncResult = FutureAsyncResult.builder().build(); + when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseAsyncResult); + + assertThat(asyncCloudConvertClient.tasks().metadata(expectedGetMetadataTaskRequest)).isEqualTo(taskResponseAsyncResult); + verify(asyncRequestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/metadata"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final GetMetadataTaskRequest actualGetMetadataTaskRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), GetMetadataTaskRequest.class)).get(); + + assertThat(actualGetMetadataTaskRequest.getInput()).isEqualTo(expectedGetMetadataTaskRequest.getInput()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + @Test + public void tasks_metadata_write() throws Exception { + final WriteMetadataTaskRequest expectedWriteMetadataTaskRequest = new WriteMetadataTaskRequest().setInput("execute-commands-task-input"); + final AsyncResult taskResponseAsyncResult = FutureAsyncResult.builder().build(); + when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseAsyncResult); + + assertThat(asyncCloudConvertClient.tasks().writeMetadata(expectedWriteMetadataTaskRequest)).isEqualTo(taskResponseAsyncResult); + verify(asyncRequestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/metadata/write"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final WriteMetadataTaskRequest actualWriteMetadataTaskRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), WriteMetadataTaskRequest.class)).get(); + + assertThat(actualWriteMetadataTaskRequest.getInput()).isEqualTo(expectedWriteMetadataTaskRequest.getInput()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + + @Test + public void tasks_watermark() throws Exception { + final AddWatermarkTaskRequest expectedAddWatermarkTaskRequest = new AddWatermarkTaskRequest().setInput("execute-commands-task-input"); + final AsyncResult taskResponseAsyncResult = FutureAsyncResult.builder().build(); + when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseAsyncResult); + + assertThat(asyncCloudConvertClient.tasks().watermark(expectedAddWatermarkTaskRequest)).isEqualTo(taskResponseAsyncResult); + verify(asyncRequestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/watermark"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final AddWatermarkTaskRequest actualAddWatermarkTaskRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), AddWatermarkTaskRequest.class)).get(); + + assertThat(actualAddWatermarkTaskRequest.getInput()).isEqualTo(expectedAddWatermarkTaskRequest.getInput()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + @After public void after() throws Exception { asyncCloudConvertClient.close(); diff --git a/src/test/java/com/cloudconvert/test/unit/ImportsUnitTest.java b/src/test/java/com/cloudconvert/test/unit/ImportsUnitTest.java index b2f35e1..bad64a6 100644 --- a/src/test/java/com/cloudconvert/test/unit/ImportsUnitTest.java +++ b/src/test/java/com/cloudconvert/test/unit/ImportsUnitTest.java @@ -4,14 +4,17 @@ import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; import com.cloudconvert.dto.request.AzureBlobImportRequest; +import com.cloudconvert.dto.request.Base64ImportRequest; import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest; import com.cloudconvert.dto.request.OpenStackImportRequest; +import com.cloudconvert.dto.request.RawImportRequest; import com.cloudconvert.dto.request.S3ImportRequest; import com.cloudconvert.dto.request.SftpImportRequest; import com.cloudconvert.dto.request.UploadImportRequest; import com.cloudconvert.dto.request.UrlImportRequest; import com.cloudconvert.dto.response.TaskResponse; import com.cloudconvert.dto.result.Result; +import com.cloudconvert.dto.result.Status; import com.cloudconvert.executor.RequestExecutor; import com.cloudconvert.resource.AbstractResource; import com.cloudconvert.test.framework.AbstractTest; @@ -134,9 +137,10 @@ public void import_upload_immediateUpload() throws Exception { new TaskResponse.Result().setForm(new TaskResponse.Result.Form().setUrl("import-upload-task-result-form-url").setParameters(parameters))); final Result showTaskResponseResult = Result.builder().build(); when(requestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))) - .thenReturn(Result.builder().status(HttpStatus.SC_CREATED).body(taskResponse).build()).thenReturn(showTaskResponseResult); + .thenReturn(Result.builder().status(Status.builder().code(HttpStatus.SC_CREATED).build()).body(taskResponse).build()) + .thenReturn(showTaskResponseResult); when(requestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.VOID_TYPE_REFERENCE))) - .thenReturn(Result.builder().status(HttpStatus.SC_CREATED).build()); + .thenReturn(Result.builder().status(Status.builder().code(HttpStatus.SC_CREATED).build()).build()); assertThat(cloudConvertClient.importUsing().upload(expectedUploadImportRequest, inputStream)).isEqualTo(showTaskResponseResult); verify(requestExecutor, times(2)).execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); @@ -148,7 +152,7 @@ public void import_upload_immediateUpload() throws Exception { assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); assertThat(httpUriRequest.getURI().toString()).isEqualTo(taskResponse.getResult().getForm().getUrl()); assertThat(httpUriRequest).isInstanceOf(HttpRequestBase.class); - assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(0).allSatisfy(header -> assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); @@ -284,6 +288,58 @@ public void import_sftp() throws Exception { assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); } + @Test + public void import_base64() throws Exception { + final Base64ImportRequest expectedBase64ImportRequest = new Base64ImportRequest().setFile("some-file").setFilename("test.txt"); + final Result taskResponseResult = Result.builder().build(); + + when(requestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseResult); + assertThat(cloudConvertClient.importUsing().base64(expectedBase64ImportRequest)).isEqualTo(taskResponseResult); + verify(requestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/import/base64"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final Base64ImportRequest actualBase64ImportRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), Base64ImportRequest.class)).get(); + + assertThat(actualBase64ImportRequest.getFilename()).isEqualTo(actualBase64ImportRequest.getFilename()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + @Test + public void import_raw() throws Exception { + final RawImportRequest expectedRawImportRequest = new RawImportRequest().setFile("content").setFilename("test.txt"); + final Result taskResponseResult = Result.builder().build(); + + when(requestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseResult); + assertThat(cloudConvertClient.importUsing().raw(expectedRawImportRequest)).isEqualTo(taskResponseResult); + verify(requestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/import/raw"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final RawImportRequest actualRawImportRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), RawImportRequest.class)).get(); + + assertThat(actualRawImportRequest.getFilename()).isEqualTo(actualRawImportRequest.getFilename()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + @After public void after() throws Exception { cloudConvertClient.close(); diff --git a/src/test/java/com/cloudconvert/test/unit/JobsUnitTest.java b/src/test/java/com/cloudconvert/test/unit/JobsUnitTest.java index 0b44a07..0106428 100644 --- a/src/test/java/com/cloudconvert/test/unit/JobsUnitTest.java +++ b/src/test/java/com/cloudconvert/test/unit/JobsUnitTest.java @@ -76,6 +76,7 @@ public class JobsUnitTest extends AbstractTest { public void before() { when(settingsProvider.getApiKey()).thenReturn(API_KEY); when(settingsProvider.getApiUrl()).thenReturn(API_URL); + when(settingsProvider.getSyncApiUrl()).thenReturn(API_SYNC_URL); cloudConvertClient = new CloudConvertClient(settingsProvider, objectMapperProvider, requestExecutor); } @@ -151,7 +152,7 @@ public void jobs_wait() throws Exception { assertThat(httpUriRequest).isNotNull(); assertThat(httpUriRequest.getMethod()).isEqualTo(HttpGet.METHOD_NAME); - assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/jobs/" + JOB_ID + "/wait"); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_SYNC_URL + "/" + AbstractResource.V2 + "/jobs/" + JOB_ID); assertThat(httpUriRequest).isInstanceOf(HttpRequestBase.class); assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); diff --git a/src/test/java/com/cloudconvert/test/unit/SignedUrlUnitTest.java b/src/test/java/com/cloudconvert/test/unit/SignedUrlUnitTest.java new file mode 100644 index 0000000..e115287 --- /dev/null +++ b/src/test/java/com/cloudconvert/test/unit/SignedUrlUnitTest.java @@ -0,0 +1,84 @@ +package com.cloudconvert.test.unit; + +import com.cloudconvert.client.CloudConvertClient; +import com.cloudconvert.client.mapper.ObjectMapperProvider; +import com.cloudconvert.client.setttings.SettingsProvider; +import com.cloudconvert.dto.request.ConvertFilesTaskRequest; +import com.cloudconvert.dto.request.TaskRequest; +import com.cloudconvert.dto.request.UrlExportRequest; +import com.cloudconvert.dto.request.UrlImportRequest; +import com.cloudconvert.executor.RequestExecutor; +import com.cloudconvert.test.framework.AbstractTest; +import com.cloudconvert.test.framework.UnitTest; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.collect.ImmutableMap; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static org.mockito.Mockito.*; +import static org.assertj.core.api.Assertions.assertThat; + +@Category(UnitTest.class) +@RunWith(MockitoJUnitRunner.class) +public class SignedUrlUnitTest extends AbstractTest { + + + @Mock + private SettingsProvider settingsProvider; + + @Mock + private RequestExecutor requestExecutor; + + @Mock(answer = Answers.CALLS_REAL_METHODS) + private ObjectMapperProvider objectMapperProvider; + + private CloudConvertClient cloudConvertClient; + + @Before + public void before() { + + + cloudConvertClient = new CloudConvertClient(settingsProvider, objectMapperProvider, requestExecutor); + } + + @Test + public void signSignedUrl() throws NoSuchAlgorithmException, InvalidKeyException, JsonProcessingException { + + final Map tasks = ImmutableMap.of( + "import-my-file", new UrlImportRequest().setUrl("import-url"), + "convert-my-file", new ConvertFilesTaskRequest() + .setInput("import-my-file") + .set("width", 100) + .set("height", 100), + "export-my-file", new UrlExportRequest().setInput("convert-my-file") + ); + + final String base = "https://s.cloudconvert.com/b3d85428-584e-4639-bc11-76b7dee9c109"; + final String signingSecret = "NT8dpJkttEyfSk3qlRgUJtvTkx64vhyX"; + final String cacheKey = "mykey"; + + final String url = cloudConvertClient.signedUrls().sign(base, signingSecret, tasks, cacheKey); + + assertThat(url).startsWith(base); + assertThat(url).contains("?job="); + assertThat(url).contains("&cache_key=mykey"); + assertThat(url).contains("&s=b04d8cf7d65ec56c839443c69dd2bb75e8792e006441019957c0d9824319612a"); + + } + + + @After + public void after() throws Exception { + cloudConvertClient.close(); + } +} diff --git a/src/test/java/com/cloudconvert/test/unit/TasksUnitTest.java b/src/test/java/com/cloudconvert/test/unit/TasksUnitTest.java index acd4480..5542ec5 100644 --- a/src/test/java/com/cloudconvert/test/unit/TasksUnitTest.java +++ b/src/test/java/com/cloudconvert/test/unit/TasksUnitTest.java @@ -3,12 +3,7 @@ import com.cloudconvert.client.CloudConvertClient; import com.cloudconvert.client.mapper.ObjectMapperProvider; import com.cloudconvert.client.setttings.SettingsProvider; -import com.cloudconvert.dto.request.CaptureWebsitesTaskRequest; -import com.cloudconvert.dto.request.ConvertFilesTaskRequest; -import com.cloudconvert.dto.request.CreateArchivesTaskRequest; -import com.cloudconvert.dto.request.ExecuteCommandsTaskRequest; -import com.cloudconvert.dto.request.MergeFilesTaskRequest; -import com.cloudconvert.dto.request.OptimizeFilesTaskRequest; +import com.cloudconvert.dto.request.*; import com.cloudconvert.dto.response.OperationResponse; import com.cloudconvert.dto.response.Pageable; import com.cloudconvert.dto.response.TaskResponse; @@ -74,6 +69,7 @@ public class TasksUnitTest extends AbstractTest { public void before() { when(settingsProvider.getApiKey()).thenReturn(API_KEY); when(settingsProvider.getApiUrl()).thenReturn(API_URL); + when(settingsProvider.getSyncApiUrl()).thenReturn(API_SYNC_URL); cloudConvertClient = new CloudConvertClient(settingsProvider, objectMapperProvider, requestExecutor); } @@ -133,7 +129,7 @@ public void tasks_wait() throws Exception { assertThat(httpUriRequest).isNotNull(); assertThat(httpUriRequest.getMethod()).isEqualTo(HttpGet.METHOD_NAME); - assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/tasks/" + TASK_ID + "/wait"); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_SYNC_URL + "/" + AbstractResource.V2 + "/tasks/" + TASK_ID); assertThat(httpUriRequest).isInstanceOf(HttpRequestBase.class); assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); @@ -496,6 +492,112 @@ public void tasks_command() throws Exception { assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); } + @Test + public void tasks_thumbnail() throws Exception { + final CreateThumbnailsTaskRequest expectedCreateThumbnailsTaskRequest = new CreateThumbnailsTaskRequest().setInput("execute-commands-task-input"); + final Result taskResponseResult = Result.builder().build(); + when(requestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseResult); + + assertThat(cloudConvertClient.tasks().thumbnail(expectedCreateThumbnailsTaskRequest)).isEqualTo(taskResponseResult); + verify(requestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/thumbnail"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final CreateThumbnailsTaskRequest actualCreateThumbnailsTaskRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), CreateThumbnailsTaskRequest.class)).get(); + + assertThat(actualCreateThumbnailsTaskRequest.getInput()).isEqualTo(expectedCreateThumbnailsTaskRequest.getInput()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + @Test + public void tasks_metadata() throws Exception { + final GetMetadataTaskRequest expectedGetMetadataTaskRequest = new GetMetadataTaskRequest().setInput("execute-commands-task-input"); + final Result taskResponseResult = Result.builder().build(); + when(requestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseResult); + + assertThat(cloudConvertClient.tasks().metadata(expectedGetMetadataTaskRequest)).isEqualTo(taskResponseResult); + verify(requestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/metadata"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final WriteMetadataTaskRequest actualMetadataTaskRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), WriteMetadataTaskRequest.class)).get(); + + assertThat(actualMetadataTaskRequest.getInput()).isEqualTo(expectedGetMetadataTaskRequest.getInput()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + @Test + public void tasks_write_metadata() throws Exception { + final WriteMetadataTaskRequest expectedWriteMetadataTaskRequest = new WriteMetadataTaskRequest().setInput("execute-commands-task-input"); + final Result taskResponseResult = Result.builder().build(); + when(requestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseResult); + + assertThat(cloudConvertClient.tasks().writeMetadata(expectedWriteMetadataTaskRequest)).isEqualTo(taskResponseResult); + verify(requestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/metadata/write"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final WriteMetadataTaskRequest actualWriteMetadataTaskRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), WriteMetadataTaskRequest.class)).get(); + + assertThat(actualWriteMetadataTaskRequest.getInput()).isEqualTo(expectedWriteMetadataTaskRequest.getInput()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + + @Test + public void tasks_watermark() throws Exception { + final AddWatermarkTaskRequest expectedAddWatermarkTaskRequest = new AddWatermarkTaskRequest().setInput("execute-commands-task-input"); + final Result taskResponseResult = Result.builder().build(); + when(requestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseResult); + + assertThat(cloudConvertClient.tasks().watermark(expectedAddWatermarkTaskRequest)).isEqualTo(taskResponseResult); + verify(requestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE)); + + final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue(); + + assertThat(httpUriRequest).isNotNull(); + assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME); + assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/watermark"); + assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> { + final AddWatermarkTaskRequest actualAddWatermarkTaskRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide() + .readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), AddWatermarkTaskRequest.class)).get(); + + assertThat(actualAddWatermarkTaskRequest.getInput()).isEqualTo(expectedAddWatermarkTaskRequest.getInput()); + }); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header -> + assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue())); + assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header -> + assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue())); + } + + @After public void after() throws Exception { cloudConvertClient.close(); diff --git a/src/test/java/com/cloudconvert/test/unit/settings/EnvironmentVariableSettingsProviderTest.java b/src/test/java/com/cloudconvert/test/unit/settings/EnvironmentVariableSettingsProviderTest.java index 2de55ae..cc2924e 100644 --- a/src/test/java/com/cloudconvert/test/unit/settings/EnvironmentVariableSettingsProviderTest.java +++ b/src/test/java/com/cloudconvert/test/unit/settings/EnvironmentVariableSettingsProviderTest.java @@ -2,16 +2,17 @@ import com.cloudconvert.client.setttings.AbstractSettingsProvider; import com.cloudconvert.client.setttings.EnvironmentVariableSettingsProvider; +import com.cloudconvert.client.setttings.EnvironmentVariables; import com.cloudconvert.test.framework.UnitTest; -import org.junit.Rule; import org.junit.Test; -import org.junit.contrib.java.lang.system.EnvironmentVariables; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.when; @Category(UnitTest.class) @RunWith(MockitoJUnitRunner.class) @@ -20,16 +21,16 @@ public class EnvironmentVariableSettingsProviderTest { public static final String API_KEY = "api-key"; public static final String WEBHOOK_SIGNING_SECRET = "webhook-signing-secret"; - @Rule - public EnvironmentVariables environmentVariables = new EnvironmentVariables(); + @Mock + private EnvironmentVariables environmentVariables; @Test public void success_useSandbox() { - environmentVariables.set(AbstractSettingsProvider.API_KEY, API_KEY); - environmentVariables.set(AbstractSettingsProvider.USE_SANDBOX, "true"); - environmentVariables.set(AbstractSettingsProvider.WEBHOOK_SIGNING_SECRET, WEBHOOK_SIGNING_SECRET); + when(environmentVariables.getenv(AbstractSettingsProvider.API_KEY)).thenReturn(API_KEY); + when(environmentVariables.getenv(AbstractSettingsProvider.USE_SANDBOX)).thenReturn("true"); + when(environmentVariables.getenv(AbstractSettingsProvider.WEBHOOK_SIGNING_SECRET)).thenReturn(WEBHOOK_SIGNING_SECRET); - final EnvironmentVariableSettingsProvider environmentVariableSettingsProvider = new EnvironmentVariableSettingsProvider(); + final EnvironmentVariableSettingsProvider environmentVariableSettingsProvider = new EnvironmentVariableSettingsProvider(environmentVariables); assertThat(environmentVariableSettingsProvider.getApiKey()).isEqualTo(API_KEY); assertThat(environmentVariableSettingsProvider.getWebhookSigningSecret()).isEqualTo(WEBHOOK_SIGNING_SECRET); assertThat(environmentVariableSettingsProvider.getApiUrl()).isEqualTo(AbstractSettingsProvider.API_URL_SANDBOX); @@ -37,11 +38,11 @@ public void success_useSandbox() { @Test public void success_useLive() { - environmentVariables.set(AbstractSettingsProvider.API_KEY, API_KEY); - environmentVariables.set(AbstractSettingsProvider.USE_SANDBOX, "false"); - environmentVariables.set(AbstractSettingsProvider.WEBHOOK_SIGNING_SECRET, WEBHOOK_SIGNING_SECRET); + when(environmentVariables.getenv(AbstractSettingsProvider.API_KEY)).thenReturn(API_KEY); + when(environmentVariables.getenv(AbstractSettingsProvider.USE_SANDBOX)).thenReturn("false"); + when(environmentVariables.getenv(AbstractSettingsProvider.WEBHOOK_SIGNING_SECRET)).thenReturn(WEBHOOK_SIGNING_SECRET); - final EnvironmentVariableSettingsProvider environmentVariableSettingsProvider = new EnvironmentVariableSettingsProvider(); + final EnvironmentVariableSettingsProvider environmentVariableSettingsProvider = new EnvironmentVariableSettingsProvider(environmentVariables); assertThat(environmentVariableSettingsProvider.getApiKey()).isEqualTo(API_KEY); assertThat(environmentVariableSettingsProvider.getWebhookSigningSecret()).isEqualTo(WEBHOOK_SIGNING_SECRET); assertThat(environmentVariableSettingsProvider.getApiUrl()).isEqualTo(AbstractSettingsProvider.API_URL_LIVE); @@ -49,6 +50,7 @@ public void success_useLive() { @Test public void failure() { - assertThatThrownBy(EnvironmentVariableSettingsProvider::new).isInstanceOf(IllegalArgumentException.class); + when(environmentVariables.getenv(AbstractSettingsProvider.API_KEY)).thenReturn(null); + assertThatThrownBy(() -> new EnvironmentVariableSettingsProvider(environmentVariables)).isInstanceOf(IllegalArgumentException.class); } } diff --git a/src/test/java/com/cloudconvert/test/unit/settings/SystemPropertySettingsProviderTest.java b/src/test/java/com/cloudconvert/test/unit/settings/SystemPropertySettingsProviderTest.java index 817f299..e4aa3bc 100644 --- a/src/test/java/com/cloudconvert/test/unit/settings/SystemPropertySettingsProviderTest.java +++ b/src/test/java/com/cloudconvert/test/unit/settings/SystemPropertySettingsProviderTest.java @@ -36,6 +36,7 @@ public void success_useSandbox() { assertThat(systemPropertySettingsProvider.getApiKey()).isEqualTo(API_KEY); assertThat(systemPropertySettingsProvider.getWebhookSigningSecret()).isEqualTo(WEBHOOK_SIGNING_SECRET); assertThat(systemPropertySettingsProvider.getApiUrl()).isEqualTo(AbstractSettingsProvider.API_URL_SANDBOX); + assertThat(systemPropertySettingsProvider.getSyncApiUrl()).isEqualTo(AbstractSettingsProvider.API_SYNC_URL_SANDBOX); } @Test @@ -48,6 +49,7 @@ public void success_useLive() { assertThat(systemPropertySettingsProvider.getApiKey()).isEqualTo(API_KEY); assertThat(systemPropertySettingsProvider.getWebhookSigningSecret()).isEqualTo(WEBHOOK_SIGNING_SECRET); assertThat(systemPropertySettingsProvider.getApiUrl()).isEqualTo(AbstractSettingsProvider.API_URL_LIVE); + assertThat(systemPropertySettingsProvider.getSyncApiUrl()).isEqualTo(AbstractSettingsProvider.API_SYNC_URL_LIVE); } @Test diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index 802d4ea..87c3a81 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -1,3 +1,3 @@ -CLOUDCONVERT_API_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjE1YTE4MjMwZGEwZjQ5Mzk1MTg1YjAyOWE4YWE3MWI0ZDJlMjgxMDVlMDkxYjk0OTYzNGVkMjAzY2I1M2U4ZGY1NmM3ZWI2N2RkZTFmNjNiIn0.eyJhdWQiOiIxIiwianRpIjoiMTVhMTgyMzBkYTBmNDkzOTUxODViMDI5YThhYTcxYjRkMmUyODEwNWUwOTFiOTQ5NjM0ZWQyMDNjYjUzZThkZjU2YzdlYjY3ZGRlMWY2M2IiLCJpYXQiOjE1ODU3MTM0OTEsIm5iZiI6MTU4NTcxMzQ5MSwiZXhwIjo0NzQxMzg3MDkxLCJzdWIiOiI0MTI0NjgyMyIsInNjb3BlcyI6WyJ1c2VyLnJlYWQiLCJ1c2VyLndyaXRlIiwidGFzay5yZWFkIiwidGFzay53cml0ZSIsIndlYmhvb2sucmVhZCIsInByZXNldC5yZWFkIiwid2ViaG9vay53cml0ZSIsInByZXNldC53cml0ZSJdfQ.m-RCnQ9-9a0MH6HhNtpTlJctOW9KJaBA8gD459ZMA0-RR0iPwbJuR9AbiMtrVq4au27aEkh8TcLMW9Vsk1vlIIw91HctAYD2hVvGDd3SpLJ9TWsxs4D4R2FoyUHMqdtIPi5jL6sxYY4FrbL9avW49nPCxhnYg1t1iSRziZq9Z0pK3NFXXnOTxwCSqlaPXnDy5U46a2oWZCXmxCCS4Expw6-I4MlJIB2HVRV4441fVLqmpJl2RgnYkcpZJWi5CVo6hkhTFyeL9zVDjEnjLgH37kFzB2bjHQC9JJOsOHHnFfz74tIEw5BE97l6RD1OGHKJ5ZZKn2Vn4D8Om3YuavFSGjdqxpGkNBbQRB8K9dIQS-mbRLKkTk7VBf15iSujRDopQqYorGxoOKvQsWw_jr2OAagil9YOLuac3hspW5a1GY5ojqOPABQG3gRgfh6Penv7othC--U0jWi8A17M-Xc_vZiGqdoQyEqy1JTlMiTLuq2aMW9F3Kxzc35D4oB4NJwRMq8vZNeCc-1NDARM1Q_yF6IbXrG2euVzjPpjnqMGaHs210lChlmMuasaBE3H8M-biJP1bFtAiegoEZhMoU-x13_qywR1f8yKy_hz_VcEQ4mqx3bzPfvdXEqQ3hi1FM2RGJ1t7bqXDdRPXADmKlNNG6hWCtvXyVeO5ID3wbYvd1k +CLOUDCONVERT_API_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjI4YmE3OGQyZjc1NWM5ZGE3Yjg1NDRhMWRkMjg2NWM4N2U0YzI5NWI0NzQ0Zjc4ZDNmMzA3OWM2NjU3ZjI0MjVhOTMyYjIxMjU5ZGU2NWQ4In0.eyJhdWQiOiIxIiwianRpIjoiMjhiYTc4ZDJmNzU1YzlkYTdiODU0NGExZGQyODY1Yzg3ZTRjMjk1YjQ3NDRmNzhkM2YzMDc5YzY2NTdmMjQyNWE5MzJiMjEyNTlkZTY1ZDgiLCJpYXQiOjE1NTkwNjc3NzcsIm5iZiI6MTU1OTA2Nzc3NywiZXhwIjo0NzE0NzQxMzc3LCJzdWIiOiIzNzExNjc4NCIsInNjb3BlcyI6WyJ1c2VyLnJlYWQiLCJ1c2VyLndyaXRlIiwidGFzay5yZWFkIiwidGFzay53cml0ZSIsIndlYmhvb2sucmVhZCIsIndlYmhvb2sud3JpdGUiXX0.IkmkfDVGwouCH-ICFAShQMHyFAHK3y90CSoissUVD8h5HFG4GqN5DEw0IFzlPr1auUKp3H1pAvPutdIQtrDMTmUUmGMUb2dRlCAuQdqxa81Q5KAmcKDgOg2YTWOWEGMy3jETTb7W6vyNGsT_3DFMapMdeOw1jdIUTMZqW3QbSCeGXj3PMRnhI7YynaDtmktjzO9IUDHbeT2HRzzMiep97KvVZNjYtZvgM-kbUjE6Mm68_kA8JMuQeor0Yg7896JPV0YM3-MnHf7elKgoCJbfBCDAbvSX_ZYsSI7IGoLLb0mgJVfFcH_HMYAHhJj5cUEJN2Iml-FkODqrRk72bVxyJs9j1GPQBl4ORXuU9yrjUgHrRaZ5YM__LwsUQB3AuB92oyQseCjULn1sWM1PzIXCcyVjKZSpn9LAAGNf9paCF-_G9ok9tZKccRouCiYl9v5XbmuxV8hXYp6fXZxyaAkj_JN2kErVSkxYzVyyZL1e220aFFnbch6nDvLFHgi-WeTQHFQDzuHsM8RKRixV8uD7pk3de4AEYg0EWqZHCr82qY7TGdSQvuAS0QIy3B89OwQW0ROW4k3Yw0XIKgKSYWyKnc7huc7yPQUIDDDAOa5OojXrVY5ZuL_hwQMIOmejcHTKFdAgzAaVnRkC8_FfVh4wHCPBaHjze9hRp5n4O1pnPFI CLOUDCONVERT_SANDBOX=true CLOUDCONVERT_WEBHOOK_SIGNING_SECRET=90sffs0d8fs0f9sf0 diff --git a/src/test/resources/invalid-application.properties b/src/test/resources/invalid-application.properties new file mode 100644 index 0000000..62e2f97 --- /dev/null +++ b/src/test/resources/invalid-application.properties @@ -0,0 +1,3 @@ +CLOUDCONVERT_API_KEY=invalid-api-key +CLOUDCONVERT_SANDBOX=true +CLOUDCONVERT_WEBHOOK_SIGNING_SECRET=invalid-webhook-signing-secret