Skip to content

Commit 7b879ee

Browse files
committed
Add write metadata support
1 parent a8c7f9a commit 7b879ee

14 files changed

Lines changed: 408 additions & 33 deletions

src/main/java/com/cloudconvert/client/AsyncCloudConvertClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public AsyncCloudConvertClient(
5151
new AsyncCreateArchivesResource(settingsProvider, objectMapperProvider, asyncRequestExecutor),
5252
new AsyncExecuteCommandsResource(settingsProvider, objectMapperProvider, asyncRequestExecutor),
5353
new AsyncCreateThumbnailsResource(settingsProvider, objectMapperProvider, asyncRequestExecutor),
54-
new AsyncGetMetadataResource(settingsProvider, objectMapperProvider, asyncRequestExecutor)
54+
new AsyncGetMetadataResource(settingsProvider, objectMapperProvider, asyncRequestExecutor),
55+
new AsyncWriteMetadataResource(settingsProvider, objectMapperProvider, asyncRequestExecutor)
5556
),
5657
new AsyncJobsResource(settingsProvider, objectMapperProvider, asyncRequestExecutor)
5758
);

src/main/java/com/cloudconvert/client/CloudConvertClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ public CloudConvertClient(
5252
new CreateArchivesResource(settingsProvider, objectMapperProvider, requestExecutor),
5353
new ExecuteCommandsResource(settingsProvider, objectMapperProvider, requestExecutor),
5454
new CreateThumbnailsResource(settingsProvider, objectMapperProvider, requestExecutor),
55-
new GetMetadataResource(settingsProvider, objectMapperProvider, requestExecutor)
55+
new GetMetadataResource(settingsProvider, objectMapperProvider, requestExecutor),
56+
new WriteMetadataResource(settingsProvider, objectMapperProvider, requestExecutor)
5657
),
5758
new JobsResource(settingsProvider, objectMapperProvider, requestExecutor)
5859
);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public enum Operation {
1414
COMMAND("command"),
1515
THUMBNAIL("thumbnail"),
1616
METADATA("metadata"),
17+
METADATA_WRITE("metadata/write"),
1718

1819
IMPORT_URL("import/url"),
1920
IMPORT_UPLOAD("import/upload"),
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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+
import java.util.Arrays;
11+
import java.util.List;
12+
import java.util.Map;
13+
import java.util.stream.Collectors;
14+
15+
@Getter
16+
@Setter
17+
@Accessors(chain = true)
18+
@ToString
19+
@EqualsAndHashCode(callSuper = true)
20+
public class WriteMetadataTaskRequest extends TaskRequest {
21+
22+
/**
23+
* (required) The ID of the input task for the conversion, normally the import task. Multiple task IDs can be provided as an array.
24+
*/
25+
private List<String> input;
26+
27+
/**
28+
* (optional) The current format of the file, e.g. pdf. If not set, the extension of the input file is used as input format.
29+
*/
30+
private String inputFormat;
31+
32+
/**
33+
* (optional) Use a specific engine for the conversion.
34+
*/
35+
private String engine;
36+
37+
/**
38+
* (required) Keys and values of metadata to write. Possible keys include Title, Author, Creator, Producer.
39+
*/
40+
private Map<String, String> metadata;
41+
42+
/**
43+
* (optional) Use a specific engine version for the conversion.
44+
*/
45+
private String engineVersion;
46+
47+
48+
public WriteMetadataTaskRequest setInput(final String... input) {
49+
this.input = Arrays.stream(input).collect(Collectors.toList());
50+
return this;
51+
}
52+
53+
@Override
54+
public Operation getOperation() {
55+
return Operation.METADATA_WRITE;
56+
}
57+
}

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

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ public abstract class AbstractTasksResource<TRAR extends AbstractResult<TaskResp
6464
@Getter
6565
private final AbstractGetMetadataResource<TRAR> abstractGetMetadataResource;
6666

67+
@Getter
68+
private final AbstractWriteMetadataResource<TRAR> abstractWriteMetadataResource;
69+
6770
private final IncludesToNameValuePairsConverter includesToNameValuePairsConverter;
6871
private final FiltersToNameValuePairsConverter filtersToNameValuePairsConverter;
6972
private final AlternativeToNameValuePairsConverter alternativeToNameValuePairsConverter;
@@ -74,7 +77,8 @@ public AbstractTasksResource(
7477
final AbstractConvertFilesResource<TRAR, ORPAR> abstractConvertFilesResource, final AbstractOptimizeFilesResource<TRAR> abstractOptimizeFilesResource,
7578
final AbstractCaptureWebsitesResource<TRAR> abstractCaptureWebsitesResource, final AbstractMergeFilesResource<TRAR> abstractMergeFilesResource,
7679
final AbstractCreateArchivesResource<TRAR> abstractCreateArchivesResource, final AbstractExecuteCommandsResource<TRAR> abstractExecuteCommandsResource,
77-
final AbstractCreateThumbnailsResource<TRAR> abstractCreateThumbnailsResource, final AbstractGetMetadataResource<TRAR> abstractGetMetadataResourceResource
80+
final AbstractCreateThumbnailsResource<TRAR> abstractCreateThumbnailsResource, final AbstractGetMetadataResource<TRAR> abstractGetMetadataResourceResource,
81+
final AbstractWriteMetadataResource<TRAR> abstractWriteMetadataResourceResource
7882
) {
7983
super(settingsProvider, objectMapperProvider);
8084

@@ -86,6 +90,7 @@ public AbstractTasksResource(
8690
this.abstractExecuteCommandsResource = abstractExecuteCommandsResource;
8791
this.abstractCreateThumbnailsResource = abstractCreateThumbnailsResource;
8892
this.abstractGetMetadataResource = abstractGetMetadataResourceResource;
93+
this.abstractWriteMetadataResource = abstractWriteMetadataResourceResource;
8994

9095
this.includesToNameValuePairsConverter = new IncludesToNameValuePairsConverter();
9196
this.filtersToNameValuePairsConverter = new FiltersToNameValuePairsConverter();
@@ -511,7 +516,7 @@ public abstract TRAR thumbnail(
511516
/**
512517
* Create a task to extract metadata from one file. Requires the task.write scope.
513518
*
514-
* @param getMetadataTaskRequest {@link CreateThumbnailsTaskRequest}
519+
* @param getMetadataTaskRequest {@link GetMetadataTaskRequest}
515520
* @return {@link TRAR}
516521
* @throws IOException
517522
* @throws URISyntaxException
@@ -521,6 +526,19 @@ public abstract TRAR metadata(
521526
) throws IOException, URISyntaxException;
522527

523528

529+
/**
530+
* Create a task to write file metadata.
531+
*
532+
* @param writeMetadataTaskRequest {@link WriteMetadataTaskRequest}
533+
* @return {@link TRAR}
534+
* @throws IOException
535+
* @throws URISyntaxException
536+
*/
537+
public abstract TRAR writeMetadata(
538+
@NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest
539+
) throws IOException, URISyntaxException;
540+
541+
524542
@Override
525543
public void close() throws IOException {
526544
abstractConvertFilesResource.close();
@@ -530,5 +548,7 @@ public void close() throws IOException {
530548
abstractCreateArchivesResource.close();
531549
abstractExecuteCommandsResource.close();
532550
abstractCreateThumbnailsResource.close();
551+
abstractGetMetadataResource.close();
552+
abstractWriteMetadataResource.close();
533553
}
534554
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.cloudconvert.resource;
2+
3+
import com.cloudconvert.client.mapper.ObjectMapperProvider;
4+
import com.cloudconvert.client.setttings.SettingsProvider;
5+
import com.cloudconvert.dto.request.WriteMetadataTaskRequest;
6+
import com.cloudconvert.dto.response.TaskResponse;
7+
import com.cloudconvert.dto.result.AbstractResult;
8+
import com.google.common.collect.ImmutableList;
9+
import org.apache.http.HttpEntity;
10+
import org.apache.http.client.methods.HttpPost;
11+
import org.apache.http.client.methods.HttpUriRequest;
12+
import org.jetbrains.annotations.NotNull;
13+
14+
import java.io.IOException;
15+
import java.net.URI;
16+
import java.net.URISyntaxException;
17+
18+
public abstract class AbstractWriteMetadataResource<TRAR extends AbstractResult<TaskResponse>> extends AbstractResource {
19+
20+
public static final String PATH_SEGMENT_METADATA = "metadata";
21+
public static final String PATH_SEGMENT_WRITE = "write";
22+
23+
public AbstractWriteMetadataResource(
24+
final SettingsProvider settingsProvider, final ObjectMapperProvider objectMapperProvider
25+
) {
26+
super(settingsProvider, objectMapperProvider);
27+
}
28+
29+
/**
30+
* Create a task to write file metadata.
31+
*
32+
* @param writeMetadataTaskRequest {@link WriteMetadataTaskRequest}
33+
* @return {@link TRAR}
34+
* @throws IOException
35+
* @throws URISyntaxException
36+
*/
37+
public abstract TRAR writeMetadata(
38+
@NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest
39+
) throws IOException, URISyntaxException;
40+
41+
protected HttpUriRequest getWriteMetadataHttpUriRequest(
42+
@NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest
43+
) throws IOException, URISyntaxException {
44+
final URI uri = getUri(ImmutableList.of(PATH_SEGMENT_METADATA, PATH_SEGMENT_WRITE));
45+
final HttpEntity httpEntity = getHttpEntity(writeMetadataTaskRequest);
46+
47+
return getHttpUriRequest(HttpPost.class, uri, httpEntity);
48+
}
49+
}

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@ public AsyncTasksResource(
3434
final AsyncConvertFilesResource asyncConvertFilesResource, final AsyncOptimizeFilesResource asyncOptimizeFilesResource,
3535
final AsyncCaptureWebsitesResource asyncCaptureWebsitesResource, final AsyncMergeFilesResource asyncMergeFilesResource,
3636
final AsyncCreateArchivesResource asyncCreateArchivesResource, final AsyncExecuteCommandsResource asyncExecuteCommandsResource,
37-
final AsyncCreateThumbnailsResource asyncCreateThumbnailsResource, final AsyncGetMetadataResource asyncGetMetadataResource
37+
final AsyncCreateThumbnailsResource asyncCreateThumbnailsResource, final AsyncGetMetadataResource asyncGetMetadataResource,
38+
final AsyncWriteMetadataResource asyncWriteMetadataResource
3839
) {
3940
super(settingsProvider, objectMapperProvider, asyncConvertFilesResource, asyncOptimizeFilesResource, asyncCaptureWebsitesResource,
40-
asyncMergeFilesResource, asyncCreateArchivesResource, asyncExecuteCommandsResource, asyncCreateThumbnailsResource, asyncGetMetadataResource);
41+
asyncMergeFilesResource, asyncCreateArchivesResource, asyncExecuteCommandsResource, asyncCreateThumbnailsResource, asyncGetMetadataResource, asyncWriteMetadataResource);
4142

4243
this.asyncRequestExecutor = asyncRequestExecutor;
4344
}
@@ -206,6 +207,13 @@ public AsyncResult<TaskResponse> metadata(
206207
return getAbstractGetMetadataResource().metadata(getMetadataTaskRequest);
207208
}
208209

210+
@Override
211+
public AsyncResult<TaskResponse> writeMetadata(
212+
@NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest
213+
) throws IOException, URISyntaxException {
214+
return getAbstractWriteMetadataResource().writeMetadata(writeMetadataTaskRequest);
215+
}
216+
209217
@Override
210218
public void close() throws IOException {
211219
asyncRequestExecutor.close();
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.cloudconvert.resource.async;
2+
3+
import com.cloudconvert.client.mapper.ObjectMapperProvider;
4+
import com.cloudconvert.client.setttings.SettingsProvider;
5+
import com.cloudconvert.dto.request.WriteMetadataTaskRequest;
6+
import com.cloudconvert.dto.response.TaskResponse;
7+
import com.cloudconvert.dto.result.AsyncResult;
8+
import com.cloudconvert.executor.AsyncRequestExecutor;
9+
import com.cloudconvert.resource.AbstractWriteMetadataResource;
10+
import lombok.extern.slf4j.Slf4j;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
import java.io.IOException;
14+
import java.net.URISyntaxException;
15+
16+
@Slf4j
17+
public class AsyncWriteMetadataResource extends AbstractWriteMetadataResource<AsyncResult<TaskResponse>> {
18+
19+
private final AsyncRequestExecutor asyncRequestExecutor;
20+
21+
public AsyncWriteMetadataResource(
22+
final SettingsProvider settingsProvider,
23+
final ObjectMapperProvider objectMapperProvider, final AsyncRequestExecutor asyncRequestExecutor
24+
) {
25+
super(settingsProvider, objectMapperProvider);
26+
27+
this.asyncRequestExecutor = asyncRequestExecutor;
28+
}
29+
30+
@Override
31+
public AsyncResult<TaskResponse> writeMetadata(
32+
@NotNull final WriteMetadataTaskRequest writeMetadataTaskRequest
33+
) throws IOException, URISyntaxException {
34+
return asyncRequestExecutor.execute(getWriteMetadataHttpUriRequest(writeMetadataTaskRequest), TASK_RESPONSE_TYPE_REFERENCE);
35+
}
36+
37+
@Override
38+
public void close() throws IOException {
39+
asyncRequestExecutor.close();
40+
}
41+
}

0 commit comments

Comments
 (0)