Skip to content

Commit bb372cc

Browse files
authored
Merge pull request #32 from iti-gupta2/import-issue
Raw and Base64 Import Request
2 parents 6c7f965 + f00aa12 commit bb372cc

10 files changed

Lines changed: 271 additions & 61 deletions

File tree

src/main/java/com/cloudconvert/dto/Operation.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public enum Operation {
2323
IMPORT_GOOGLE_CLOUD_STORAGE("import/google-cloud-storage"),
2424
IMPORT_OPENSTACK("import/openstack"),
2525
IMPORT_SFTP("import/sftp"),
26+
IMPORT_BASE64("import/base64"),
27+
IMPORT_RAW("import/raw"),
2628

2729
EXPORT_URL("export/url"),
2830
EXPORT_S3("export/s3"),
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.cloudconvert.dto.request;
2+
3+
import com.cloudconvert.dto.Operation;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import lombok.ToString;
8+
import lombok.experimental.Accessors;
9+
10+
@Getter
11+
@Setter
12+
@Accessors(chain = true)
13+
@ToString
14+
@EqualsAndHashCode(callSuper = true)
15+
public class Base64ImportRequest extends TaskRequest{
16+
17+
/***
18+
* (required) The base64 encoded file content.
19+
*/
20+
private String file;
21+
22+
/***
23+
* (required) The filename of the input file, including extension.
24+
*/
25+
private String filename;
26+
27+
@Override
28+
public Operation getOperation() {
29+
return Operation.IMPORT_BASE64;
30+
}
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.cloudconvert.dto.request;
2+
3+
import com.cloudconvert.dto.Operation;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import lombok.ToString;
8+
import lombok.experimental.Accessors;
9+
10+
@Getter
11+
@Setter
12+
@Accessors(chain = true)
13+
@ToString
14+
@EqualsAndHashCode(callSuper = true)
15+
public class RawImportRequest extends TaskRequest{
16+
17+
/***
18+
* (required) The raw file content.
19+
*/
20+
private String file;
21+
22+
/***
23+
* (required) The filename of the input file, including extension.
24+
*/
25+
private String filename;
26+
27+
@Override
28+
public Operation getOperation() {
29+
return Operation.IMPORT_RAW;
30+
}
31+
}

src/main/java/com/cloudconvert/resource/AbstractImportFilesResource.java

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,7 @@
22

33
import com.cloudconvert.client.mapper.ObjectMapperProvider;
44
import com.cloudconvert.client.setttings.SettingsProvider;
5-
import com.cloudconvert.dto.request.AzureBlobImportRequest;
6-
import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest;
7-
import com.cloudconvert.dto.request.OpenStackImportRequest;
8-
import com.cloudconvert.dto.request.S3ImportRequest;
9-
import com.cloudconvert.dto.request.SftpImportRequest;
10-
import com.cloudconvert.dto.request.UploadImportRequest;
11-
import com.cloudconvert.dto.request.UrlImportRequest;
5+
import com.cloudconvert.dto.request.*;
126
import com.cloudconvert.dto.response.TaskResponse;
137
import com.cloudconvert.dto.result.AbstractResult;
148
import com.google.common.collect.ImmutableList;
@@ -45,6 +39,8 @@ public abstract class AbstractImportFilesResource<TRAR extends AbstractResult<Ta
4539
public static final String PATH_SEGMENT_GOOGLE_CLOUD_STORAGE = "google-cloud-storage";
4640
public static final String PATH_SEGMENT_OPENSTACK = "openstack";
4741
public static final String PATH_SEGMENT_SFTP = "sftp";
42+
public static final String PATH_SEGMENT_BASE64 = "base64";
43+
public static final String PATH_SEGMENT_RAW = "raw";
4844

4945
private final Tika tika;
5046

@@ -347,6 +343,48 @@ protected HttpUriRequest getSftpHttpUriRequest(
347343
return getHttpUriRequest(HttpPost.class, uri, httpEntity);
348344
}
349345

346+
/***
347+
* Create a task to import a base64 file
348+
*
349+
* @param base64ImportRequest
350+
* @return
351+
* @throws IOException
352+
* @throws URISyntaxException
353+
*/
354+
public abstract TRAR base64(
355+
@NotNull final Base64ImportRequest base64ImportRequest
356+
) throws IOException, URISyntaxException;
357+
358+
protected HttpUriRequest getBase64HttpUriRequest(
359+
@NotNull final Base64ImportRequest base64ImportRequest
360+
) throws IOException, URISyntaxException {
361+
final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_BASE64));
362+
final HttpEntity httpEntity = getHttpEntity(base64ImportRequest);
363+
364+
return getHttpUriRequest(HttpPost.class, uri, httpEntity);
365+
}
366+
367+
/***
368+
* Create a task to import raw file
369+
*
370+
* @param rawImportRequest
371+
* @return
372+
* @throws IOException
373+
* @throws URISyntaxException
374+
*/
375+
public abstract TRAR raw(
376+
@NotNull final RawImportRequest rawImportRequest
377+
) throws IOException, URISyntaxException;
378+
379+
protected HttpUriRequest getRawHttpUriRequest(
380+
@NotNull final RawImportRequest rawImportRequest
381+
) throws IOException, URISyntaxException {
382+
final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_IMPORT, PATH_SEGMENT_RAW));
383+
final HttpEntity httpEntity = getHttpEntity(rawImportRequest);
384+
385+
return getHttpUriRequest(HttpPost.class, uri, httpEntity);
386+
}
387+
350388
protected HttpEntity getMultipartHttpEntity(
351389
final TaskResponse.Result.Form uploadImportResponseResultForm, final File file
352390
) throws IOException {

src/main/java/com/cloudconvert/resource/async/AsyncImportFilesResource.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,7 @@
22

33
import com.cloudconvert.client.mapper.ObjectMapperProvider;
44
import com.cloudconvert.client.setttings.SettingsProvider;
5-
import com.cloudconvert.dto.request.AzureBlobImportRequest;
6-
import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest;
7-
import com.cloudconvert.dto.request.OpenStackImportRequest;
8-
import com.cloudconvert.dto.request.S3ImportRequest;
9-
import com.cloudconvert.dto.request.SftpImportRequest;
10-
import com.cloudconvert.dto.request.UploadImportRequest;
11-
import com.cloudconvert.dto.request.UrlImportRequest;
5+
import com.cloudconvert.dto.request.*;
126
import com.cloudconvert.dto.response.TaskResponse;
137
import com.cloudconvert.dto.result.AsyncResult;
148
import com.cloudconvert.dto.result.CompletedAsyncResult;
@@ -250,6 +244,16 @@ public AsyncResult<TaskResponse> sftp(
250244
return asyncRequestExecutor.execute(getSftpHttpUriRequest(sftpImportRequest), TASK_RESPONSE_TYPE_REFERENCE);
251245
}
252246

247+
@Override
248+
public AsyncResult<TaskResponse> base64(@NotNull final Base64ImportRequest base64ImportRequest) throws IOException, URISyntaxException {
249+
return asyncRequestExecutor.execute(getBase64HttpUriRequest(base64ImportRequest), TASK_RESPONSE_TYPE_REFERENCE);
250+
}
251+
252+
@Override
253+
public AsyncResult<TaskResponse> raw(@NotNull final RawImportRequest rawImportRequest) throws IOException, URISyntaxException {
254+
return asyncRequestExecutor.execute(getRawHttpUriRequest(rawImportRequest), TASK_RESPONSE_TYPE_REFERENCE);
255+
}
256+
253257
@Override
254258
public void close() throws IOException {
255259
asyncRequestExecutor.close();

src/main/java/com/cloudconvert/resource/sync/ImportFilesResource.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,7 @@
22

33
import com.cloudconvert.client.mapper.ObjectMapperProvider;
44
import com.cloudconvert.client.setttings.SettingsProvider;
5-
import com.cloudconvert.dto.request.AzureBlobImportRequest;
6-
import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest;
7-
import com.cloudconvert.dto.request.OpenStackImportRequest;
8-
import com.cloudconvert.dto.request.S3ImportRequest;
9-
import com.cloudconvert.dto.request.SftpImportRequest;
10-
import com.cloudconvert.dto.request.UploadImportRequest;
11-
import com.cloudconvert.dto.request.UrlImportRequest;
5+
import com.cloudconvert.dto.request.*;
126
import com.cloudconvert.dto.response.TaskResponse;
137
import com.cloudconvert.dto.result.Result;
148
import com.cloudconvert.executor.RequestExecutor;
@@ -207,6 +201,16 @@ public Result<TaskResponse> sftp(
207201
return requestExecutor.execute(getSftpHttpUriRequest(sftpImportRequest), TASK_RESPONSE_TYPE_REFERENCE);
208202
}
209203

204+
@Override
205+
public Result<TaskResponse> base64(@NotNull Base64ImportRequest base64ImportRequest) throws IOException, URISyntaxException {
206+
return requestExecutor.execute(getBase64HttpUriRequest(base64ImportRequest), TASK_RESPONSE_TYPE_REFERENCE);
207+
}
208+
209+
@Override
210+
public Result<TaskResponse> raw(@NotNull RawImportRequest rawImportRequest) throws IOException, URISyntaxException {
211+
return requestExecutor.execute(getRawHttpUriRequest(rawImportRequest), TASK_RESPONSE_TYPE_REFERENCE);
212+
}
213+
210214
@Override
211215
public void close() throws IOException {
212216
requestExecutor.close();

src/test/java/com/cloudconvert/test/integration/AsyncImportsAndExportsIntegrationTest.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,7 @@
33
import com.cloudconvert.client.AsyncCloudConvertClient;
44
import com.cloudconvert.dto.Operation;
55
import com.cloudconvert.dto.Status;
6-
import com.cloudconvert.dto.request.AzureBlobExportRequest;
7-
import com.cloudconvert.dto.request.AzureBlobImportRequest;
8-
import com.cloudconvert.dto.request.GoogleCloudStorageExportRequest;
9-
import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest;
10-
import com.cloudconvert.dto.request.OpenStackExportRequest;
11-
import com.cloudconvert.dto.request.OpenStackImportRequest;
12-
import com.cloudconvert.dto.request.S3ExportRequest;
13-
import com.cloudconvert.dto.request.S3ImportRequest;
14-
import com.cloudconvert.dto.request.SftpExportRequest;
15-
import com.cloudconvert.dto.request.SftpImportRequest;
16-
import com.cloudconvert.dto.request.UploadImportRequest;
17-
import com.cloudconvert.dto.request.UrlExportRequest;
18-
import com.cloudconvert.dto.request.UrlImportRequest;
6+
import com.cloudconvert.dto.request.*;
197
import com.cloudconvert.dto.response.TaskResponse;
208
import com.cloudconvert.dto.result.AsyncResult;
219
import com.cloudconvert.dto.result.Result;
@@ -257,6 +245,22 @@ public void importTasksCreation() throws Exception {
257245

258246
final TaskResponse sftpImportTaskResponse = sftpImportTaskResponseResult.getBody();
259247
assertThat(sftpImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_SFTP);
248+
249+
// Import Base64
250+
final Base64ImportRequest base64ImportRequest = new Base64ImportRequest().setFile("dGVzdDEyMw==").setFilename("test.txt");
251+
final Result<TaskResponse> base64ImportTaskResponseResult = asyncCloudConvertClient.importUsing().base64(base64ImportRequest).get();
252+
assertThat(base64ImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED);
253+
254+
final TaskResponse base64ImportTaskResponse = base64ImportTaskResponseResult.getBody();
255+
assertThat(base64ImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_BASE64);
256+
257+
// Import Raw
258+
final RawImportRequest rawImportRequest = new RawImportRequest().setFile("content").setFilename("test.txt");
259+
final Result<TaskResponse> rawImportTaskResponseResult = asyncCloudConvertClient.importUsing().raw(rawImportRequest).get();
260+
assertThat(rawImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED);
261+
262+
final TaskResponse rawImportTaskResponse = rawImportTaskResponseResult.getBody();
263+
assertThat(rawImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_RAW);
260264
}
261265

262266
/**

src/test/java/com/cloudconvert/test/integration/ImportsAndExportsIntegrationTest.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,7 @@
33
import com.cloudconvert.client.CloudConvertClient;
44
import com.cloudconvert.dto.Operation;
55
import com.cloudconvert.dto.Status;
6-
import com.cloudconvert.dto.request.AzureBlobExportRequest;
7-
import com.cloudconvert.dto.request.AzureBlobImportRequest;
8-
import com.cloudconvert.dto.request.GoogleCloudStorageExportRequest;
9-
import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest;
10-
import com.cloudconvert.dto.request.OpenStackExportRequest;
11-
import com.cloudconvert.dto.request.OpenStackImportRequest;
12-
import com.cloudconvert.dto.request.S3ExportRequest;
13-
import com.cloudconvert.dto.request.S3ImportRequest;
14-
import com.cloudconvert.dto.request.SftpExportRequest;
15-
import com.cloudconvert.dto.request.SftpImportRequest;
16-
import com.cloudconvert.dto.request.UploadImportRequest;
17-
import com.cloudconvert.dto.request.UrlExportRequest;
18-
import com.cloudconvert.dto.request.UrlImportRequest;
6+
import com.cloudconvert.dto.request.*;
197
import com.cloudconvert.dto.response.TaskResponse;
208
import com.cloudconvert.dto.result.Result;
219
import com.cloudconvert.test.framework.AbstractTest;
@@ -252,6 +240,23 @@ public void importTasksCreation() throws Exception {
252240

253241
final TaskResponse sftpImportTaskResponse = sftpImportTaskResponseResult.getBody();
254242
assertThat(sftpImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_SFTP);
243+
244+
// Import Base64
245+
final Base64ImportRequest base64ImportRequest = new Base64ImportRequest().setFile("dGVzdDEyMw==").setFilename("test.txt");
246+
final Result<TaskResponse> base64ImportTaskResponseResult = cloudConvertClient.importUsing().base64(base64ImportRequest);
247+
assertThat(base64ImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED);
248+
249+
final TaskResponse base64ImportTaskResponse = base64ImportTaskResponseResult.getBody();
250+
assertThat(base64ImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_BASE64);
251+
252+
// Import Raw
253+
final RawImportRequest rawImportRequest = new RawImportRequest().setFile("content").setFilename("test.txt");
254+
final Result<TaskResponse> rawImportTaskResponseResult = cloudConvertClient.importUsing().raw(rawImportRequest);
255+
assertThat(rawImportTaskResponseResult.getStatus()).isEqualTo(HttpStatus.SC_CREATED);
256+
257+
final TaskResponse rawImportTaskResponse = rawImportTaskResponseResult.getBody();
258+
assertThat(rawImportTaskResponse.getOperation()).isEqualTo(Operation.IMPORT_RAW);
259+
255260
}
256261

257262
/**

src/test/java/com/cloudconvert/test/unit/AsyncImportsUnitTest.java

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,7 @@
33
import com.cloudconvert.client.AsyncCloudConvertClient;
44
import com.cloudconvert.client.mapper.ObjectMapperProvider;
55
import com.cloudconvert.client.setttings.SettingsProvider;
6-
import com.cloudconvert.dto.request.AzureBlobImportRequest;
7-
import com.cloudconvert.dto.request.GoogleCloudStorageImportRequest;
8-
import com.cloudconvert.dto.request.OpenStackImportRequest;
9-
import com.cloudconvert.dto.request.S3ImportRequest;
10-
import com.cloudconvert.dto.request.SftpImportRequest;
11-
import com.cloudconvert.dto.request.UploadImportRequest;
12-
import com.cloudconvert.dto.request.UrlImportRequest;
6+
import com.cloudconvert.dto.request.*;
137
import com.cloudconvert.dto.response.TaskResponse;
148
import com.cloudconvert.dto.result.AsyncResult;
159
import com.cloudconvert.dto.result.CompletedAsyncResult;
@@ -288,6 +282,57 @@ public void import_sftp() throws Exception {
288282
assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header ->
289283
assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue()));
290284
}
285+
@Test
286+
public void import_base64() throws Exception{
287+
final Base64ImportRequest expectedBase64ImportRequest = new Base64ImportRequest().setFile("some-file").setFilename("test.txt");
288+
final AsyncResult<TaskResponse> taskResponseAsyncResult = FutureAsyncResult.<TaskResponse>builder().build();
289+
290+
when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseAsyncResult);
291+
assertThat(asyncCloudConvertClient.importUsing().base64(expectedBase64ImportRequest)).isEqualTo(taskResponseAsyncResult);
292+
verify(asyncRequestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE));
293+
294+
final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue();
295+
296+
assertThat(httpUriRequest).isNotNull();
297+
assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME);
298+
assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/import/base64");
299+
assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> {
300+
final Base64ImportRequest actualBase64ImportRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide()
301+
.readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), Base64ImportRequest.class)).get();
302+
303+
assertThat(actualBase64ImportRequest.getFilename()).isEqualTo(actualBase64ImportRequest.getFilename());
304+
});
305+
assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header ->
306+
assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue()));
307+
assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header ->
308+
assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue()));
309+
}
310+
311+
@Test
312+
public void import_raw() throws Exception{
313+
final RawImportRequest expectedRawImportRequest = new RawImportRequest().setFile("content").setFilename("test.txt");
314+
final AsyncResult<TaskResponse> taskResponseAsyncResult = FutureAsyncResult.<TaskResponse>builder().build();
315+
316+
when(asyncRequestExecutor.execute(any(HttpUriRequest.class), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE))).thenReturn(taskResponseAsyncResult);
317+
assertThat(asyncCloudConvertClient.importUsing().raw(expectedRawImportRequest)).isEqualTo(taskResponseAsyncResult);
318+
verify(asyncRequestExecutor, times(1)).execute(httpUriRequestArgumentCaptor.capture(), eq(AbstractResource.TASK_RESPONSE_TYPE_REFERENCE));
319+
320+
final HttpUriRequest httpUriRequest = httpUriRequestArgumentCaptor.getValue();
321+
322+
assertThat(httpUriRequest).isNotNull();
323+
assertThat(httpUriRequest.getMethod()).isEqualTo(HttpPost.METHOD_NAME);
324+
assertThat(httpUriRequest.getURI().toString()).isEqualTo(API_URL + "/" + AbstractResource.V2 + "/import/raw");
325+
assertThat(httpUriRequest).isInstanceOfSatisfying(HttpEntityEnclosingRequestBase.class, httpEntityEnclosingRequestBase -> {
326+
final RawImportRequest actualRawImportRequest = ThrowingSupplier.unchecked(() -> objectMapperProvider.provide()
327+
.readValue(httpEntityEnclosingRequestBase.getEntity().getContent(), RawImportRequest.class)).get();
328+
329+
assertThat(actualRawImportRequest.getFilename()).isEqualTo(actualRawImportRequest.getFilename());
330+
});
331+
assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_AUTHORIZATION)).hasSize(1).allSatisfy(header ->
332+
assertThat(VALUE_AUTHORIZATION).isEqualTo(header.getValue()));
333+
assertThat(httpUriRequest.getHeaders(AbstractResource.HEADER_USER_AGENT)).hasSize(1).allSatisfy(header ->
334+
assertThat(AbstractResource.VALUE_USER_AGENT).isEqualTo(header.getValue()));
335+
}
291336

292337
@After
293338
public void after() throws Exception {

0 commit comments

Comments
 (0)