Skip to content

Commit 417c965

Browse files
authored
Merge pull request #190 from digipost/multiple-documents-direct-job
Support multiple documents for direct jobs
2 parents 5c35f32 + b6f2f79 commit 417c965

File tree

7 files changed

+59
-50
lines changed

7 files changed

+59
-50
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<maven.compiler.source>1.8</maven.compiler.source>
3131
<maven.compiler.target>1.8</maven.compiler.target>
3232
<project.previousVersion>set_with_-Dproject.previousVersion=X.Y</project.previousVersion>
33-
<signature.api.version>2.8-RC1</signature.api.version>
33+
<signature.api.version>2.8-RC2</signature.api.version>
3434
<slf4j.version>1.7.30</slf4j.version>
3535
</properties>
3636

src/main/java/no/digipost/signature/client/asice/manifest/CreateDirectManifest.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@
1616

1717
import java.util.ArrayList;
1818
import java.util.List;
19+
import java.util.stream.Collectors;
1920

2021
public class CreateDirectManifest extends ManifestCreator<DirectJob> {
2122

2223
@Override
2324
Object buildXmlManifest(DirectJob job, Sender sender) {
24-
DirectDocument document = job.getDocument();
25+
List<DirectDocument> documents = job.getDocuments();
2526

2627
List<XMLDirectSigner> signers = new ArrayList<>();
2728
for (DirectSigner signer : job.getSigners()) {
@@ -40,11 +41,14 @@ Object buildXmlManifest(DirectJob job, Sender sender) {
4041
.withSigners(signers)
4142
.withRequiredAuthentication(job.getRequiredAuthentication().map(AuthenticationLevel::getXmlEnumValue).orElse(null))
4243
.withSender(new XMLSender().withOrganizationNumber(sender.getOrganizationNumber()))
43-
.withDocument(new XMLDirectDocument()
44-
.withTitle(document.getTitle())
45-
.withDescription(document.getMessage())
46-
.withHref(XMLHref.of(document.getFileName()))
47-
.withMime(document.getMimeType())
44+
.withTitle(job.getTitle())
45+
.withDescription(job.getDescription().orElse(null))
46+
.withDocuments(documents.stream().map(document ->
47+
new XMLDirectDocument()
48+
.withTitle(document.getTitle())
49+
.withHref(XMLHref.of(document.getFileName()))
50+
.withMime(document.getMimeType())
51+
).collect(Collectors.toList())
4852
)
4953
.withIdentifierInSignedDocuments(job.getIdentifierInSignedDocuments().map(IdentifierInSignedDocuments::getXmlEnumValue).orElse(null))
5054
;

src/main/java/no/digipost/signature/client/direct/DirectDocument.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,19 @@
66

77
public class DirectDocument extends Document {
88

9-
private final String message;
10-
11-
private DirectDocument(String title, String message, String fileName, FileType fileType, byte[] document) {
9+
private DirectDocument(String title, String fileName, FileType fileType, byte[] document) {
1210
super(title, fileName, fileType, document);
13-
this.message = message;
1411
}
1512

1613
public static Builder builder(final String title, final String fileName, final byte[] document) {
1714
return new Builder(title, fileName, document);
1815
}
1916

20-
public String getMessage() {
21-
return message;
22-
}
23-
2417
public static class Builder {
2518

2619
private String title;
2720
private String fileName;
2821
private byte[] document;
29-
private String message;
3022
private FileType fileType = PDF;
3123

3224
public Builder(final String title, final String fileName, final byte[] document) {
@@ -35,18 +27,13 @@ public Builder(final String title, final String fileName, final byte[] document)
3527
this.document = document;
3628
}
3729

38-
public Builder message(String message) {
39-
this.message = message;
40-
return this;
41-
}
42-
4330
public Builder fileType(final FileType fileType) {
4431
this.fileType = fileType;
4532
return this;
4633
}
4734

4835
public DirectDocument build() {
49-
return new DirectDocument(title, message, fileName, fileType, document);
36+
return new DirectDocument(title, fileName, fileType, document);
5037
}
5138
}
5239
}

src/main/java/no/digipost/signature/client/direct/DirectJob.java

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ public class DirectJob implements SignatureJob, WithExitUrls {
1212

1313
private String reference;
1414
private List<DirectSigner> signers;
15-
private DirectDocument document;
15+
private List<DirectDocument> documents;
16+
private String title;
17+
private Optional<String> description = Optional.empty();
1618
private URI completionUrl;
1719
private URI rejectionUrl;
1820
private URI errorUrl;
@@ -21,9 +23,10 @@ public class DirectJob implements SignatureJob, WithExitUrls {
2123
private Optional<AuthenticationLevel> requiredAuthentication = Optional.empty();
2224
private Optional<IdentifierInSignedDocuments> identifierInSignedDocuments = Optional.empty();
2325

24-
private DirectJob(List<DirectSigner> signers, DirectDocument document, URI completionUrl, URI rejectionUrl, URI errorUrl) {
26+
private DirectJob(String title, List<DirectSigner> signers, List<DirectDocument> documents, URI completionUrl, URI rejectionUrl, URI errorUrl) {
27+
this.title = title;
2528
this.signers = unmodifiableList(new ArrayList<>(signers));
26-
this.document = document;
29+
this.documents = unmodifiableList(new ArrayList<>(documents));
2730
this.completionUrl = completionUrl;
2831
this.rejectionUrl = rejectionUrl;
2932
this.errorUrl = errorUrl;
@@ -35,13 +38,8 @@ public String getReference() {
3538
}
3639

3740
@Override
38-
public DirectDocument getDocument() {
39-
return document;
40-
}
41-
42-
@Override
43-
public List<? extends Document> getDocuments() {
44-
return unmodifiableList(Collections.singletonList(document));
41+
public List<DirectDocument> getDocuments() {
42+
return documents;
4543
}
4644

4745
@Override
@@ -93,13 +91,12 @@ public Optional<StatusRetrievalMethod> getStatusRetrievalMethod() {
9391
* @param signers The {@link DirectSigner DirectSigners} of the document.
9492
*
9593
* @return a builder to further customize the job
96-
* @see DirectJob#builder(DirectDocument, WithExitUrls, List)
94+
* @see DirectJob#builder(String, DirectDocument, WithExitUrls, List)
9795
*/
98-
public static Builder builder(DirectDocument document, WithExitUrls hasExitUrls, DirectSigner... signers) {
99-
return builder(document, hasExitUrls, Arrays.asList(signers));
96+
public static Builder builder(String title, DirectDocument document, WithExitUrls hasExitUrls, DirectSigner... signers) {
97+
return builder(title, Collections.singletonList(document), hasExitUrls, Arrays.asList(signers));
10098
}
10199

102-
103100
/**
104101
* Create a new DirectJob.
105102
*
@@ -110,26 +107,48 @@ public static Builder builder(DirectDocument document, WithExitUrls hasExitUrls,
110107
* @param signers The {@link DirectSigner DirectSigners} of the document.
111108
*
112109
* @return a builder to further customize the job
113-
* @see DirectJob#builder(DirectDocument, WithExitUrls, DirectSigner...)
110+
* @see DirectJob#builder(String, DirectDocument, WithExitUrls, DirectSigner...)
114111
*/
115-
public static Builder builder(DirectDocument document, WithExitUrls hasExitUrls, List<DirectSigner> signers) {
116-
return new Builder(signers, document, hasExitUrls.getCompletionUrl(), hasExitUrls.getRejectionUrl(), hasExitUrls.getErrorUrl());
112+
public static Builder builder(String title, DirectDocument document, WithExitUrls hasExitUrls, List<DirectSigner> signers) {
113+
return builder(title, Collections.singletonList(document), hasExitUrls, signers);
114+
}
115+
116+
public static Builder builder(String title, List<DirectDocument> documents, WithExitUrls hasExitUrls, DirectSigner... signers) {
117+
return builder(title, documents, hasExitUrls, Arrays.asList(signers));
118+
}
119+
120+
public static Builder builder(String title, List<DirectDocument> documents, WithExitUrls hasExitUrls, List<DirectSigner> signers) {
121+
return new Builder(title, signers, documents, hasExitUrls.getCompletionUrl(), hasExitUrls.getRejectionUrl(), hasExitUrls.getErrorUrl());
117122
}
118123

124+
public String getTitle() {
125+
return title;
126+
}
127+
128+
public Optional<String> getDescription() {
129+
return description;
130+
}
131+
132+
119133
public static class Builder implements JobCustomizations<Builder> {
120134

121135
private final DirectJob target;
122136
private boolean built = false;
123137

124-
private Builder(List<DirectSigner> signers, DirectDocument document, URI completionUrl, URI rejectionUrl, URI errorUrl) {
125-
target = new DirectJob(signers, document, completionUrl, rejectionUrl, errorUrl);
138+
private Builder(String title, List<DirectSigner> signers, List<DirectDocument> documents, URI completionUrl, URI rejectionUrl, URI errorUrl) {
139+
target = new DirectJob(title, signers, documents, completionUrl, rejectionUrl, errorUrl);
126140
}
127141

128142
@Override
129143
public Builder withReference(UUID uuid) {
130144
return withReference(uuid.toString());
131145
}
132146

147+
public Builder withDescription(String description) {
148+
target.description = Optional.of(description);
149+
return this;
150+
}
151+
133152
@Override
134153
public Builder withReference(String reference) {
135154
target.reference = reference;

src/test/java/no/digipost/signature/client/asice/CreateASiCETest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,18 @@ public static void initTempFolder() throws URISyntaxException, IOException {
5656

5757
private static Path dumpFolder;
5858

59-
private static final DirectDocument DIRECT_DOCUMENT = DirectDocument.builder("Title", "file.txt", "hello".getBytes())
60-
.message("Message")
59+
private static final DirectDocument DIRECT_DOCUMENT = DirectDocument.builder("Document title", "file.txt", "hello".getBytes())
6160
.fileType(Document.FileType.TXT)
6261
.build();
6362

64-
private static final PortalDocument PORTAL_DOCUMENT = PortalDocument.builder("Title", "file.txt", "hello".getBytes())
63+
private static final PortalDocument PORTAL_DOCUMENT = PortalDocument.builder("Document title", "file.txt", "hello".getBytes())
6564
.fileType(Document.FileType.TXT)
6665
.build();
6766

6867

6968
@Test
7069
public void create_direct_asice_and_write_to_disk() throws IOException {
71-
DirectJob job = DirectJob.builder(DIRECT_DOCUMENT, singleExitUrl(URI.create("https://job.well.done.org")), DirectSigner.withPersonalIdentificationNumber("12345678910").build())
70+
DirectJob job = DirectJob.builder("Job title", DIRECT_DOCUMENT, singleExitUrl(URI.create("https://job.well.done.org")), DirectSigner.withPersonalIdentificationNumber("12345678910").build())
7271
.withReference("direct job")
7372
.build();
7473

src/test/java/no/digipost/signature/client/asice/manifest/CreateDirectManifestTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ void accept_valid_manifest() {
2222
CreateDirectManifest createManifest = new CreateDirectManifest();
2323

2424
DirectDocument document = DirectDocument.builder("Title", "file.txt", "hello".getBytes())
25-
.message("Message")
2625
.fileType(Document.FileType.TXT)
2726
.build();
2827

2928
DirectJob job = DirectJob.builder(
29+
"Job title",
3030
document,
3131
ExitUrls.of(URI.create("http://localhost/signed"), URI.create("http://localhost/canceled"), URI.create("http://localhost/failed")),
3232
DirectSigner.withPersonalIdentificationNumber("12345678910").build())

src/test/java/no/digipost/signature/client/docs/DirectClientUseCases.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ static void create_and_send_signature_job() {
3232
DirectClient client = new DirectClient(clientConfiguration);
3333

3434
byte[] documentBytes = null; // Loaded document bytes
35-
DirectDocument document = DirectDocument.builder("Subject", "document.pdf", documentBytes).build();
35+
DirectDocument document = DirectDocument.builder("Document title", "document.pdf", documentBytes).build();
3636

3737
ExitUrls exitUrls = ExitUrls.of(
3838
URI.create("http://sender.org/onCompletion"),
@@ -41,7 +41,7 @@ static void create_and_send_signature_job() {
4141
);
4242

4343
DirectSigner signer = DirectSigner.withPersonalIdentificationNumber("12345678910").build();
44-
DirectJob directJob = DirectJob.builder(document, exitUrls, signer).build();
44+
DirectJob directJob = DirectJob.builder("Job title", document, exitUrls, signer).build();
4545

4646
DirectJobResponse directJobResponse = client.create(directJob);
4747
}
@@ -102,7 +102,7 @@ static void get_signature_job_status() {
102102
static void create_job_and_status_by_polling() {
103103
DirectClient client = null; // As initialized earlier
104104

105-
DirectJob directJob = DirectJob.builder(document, exitUrls, signer)
105+
DirectJob directJob = DirectJob.builder("Job title", document, exitUrls, signer)
106106
.retrieveStatusBy(StatusRetrievalMethod.POLLING)
107107
.build();
108108

@@ -148,7 +148,7 @@ static void specifying_queues() {
148148
DirectClient client = null; // As initialized earlier
149149
Sender sender = new Sender("000000000", PollingQueue.of("CustomPollingQueue"));
150150

151-
DirectJob directJob = DirectJob.builder(document, exitUrls, signer)
151+
DirectJob directJob = DirectJob.builder("Job title", document, exitUrls, signer)
152152
.retrieveStatusBy(StatusRetrievalMethod.POLLING).withSender(sender)
153153
.build();
154154

0 commit comments

Comments
 (0)