Skip to content
Snippets Groups Projects
Commit b1348139 authored by Martin Vogel's avatar Martin Vogel
Browse files

#414 Refactor subscriber client and add step interfaces

parent 8abbd141
No related branches found
No related tags found
2 merge requests!2#414 Remaining changes from MR,!1planning#414 Methoden Signaturen (Zwischenstand)
...@@ -68,16 +68,19 @@ public interface Sender { ...@@ -68,16 +68,19 @@ public interface Sender {
Optional<Metadata> createMetadata(final Data data, final List<Attachment> attachments); Optional<Metadata> createMetadata(final Data data, final List<Attachment> attachments);
/** /**
* Creates and announces a new {@link Submission}
* *
* @param submission * @param submission with a destinationId, a list of attachmentIds and a serviceType
* @return * @return the created submission
*/ */
Optional<Submission> createSubmission(Submission submission); Optional<Submission> createSubmission(Submission submission);
/** /**
* Posts the announced {@link Submission}
* @param submissionId identifier of the announced submission
* @param metadata the encrypted metadata
* *
* @param submission * @return the submission
* @return
*/ */
Optional<Submission> sendSubmission(Submission submission); Optional<Submission> sendSubmission(String submissionId, Metadata metadata);
} }
...@@ -9,6 +9,7 @@ import de.fitko.fitconnect.api.domain.model.event.SecurityEventToken; ...@@ -9,6 +9,7 @@ import de.fitko.fitconnect.api.domain.model.event.SecurityEventToken;
import de.fitko.fitconnect.api.domain.model.submission.Submission; import de.fitko.fitconnect.api.domain.model.submission.Submission;
import de.fitko.fitconnect.api.domain.validation.ValidationResult; import de.fitko.fitconnect.api.domain.validation.ValidationResult;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -65,21 +66,27 @@ public interface Subscriber { ...@@ -65,21 +66,27 @@ public interface Subscriber {
ValidationResult validateMetadataHashValues(final Metadata metadata); ValidationResult validateMetadataHashValues(final Metadata metadata);
/** /**
* Polls for available {@link Submission}s on the given destinationId
* *
* @param submissionId * @param destinationId restricts the query to a specific destination
* @param attachmentId * @param limit number of submissions in result (max. is 500)
* @return * @param offset position in the dataset
* *
* @return list of found submissions
*/ */
Optional<Submission> getSubmission(String submissionId, String attachmentId); List<Submission> pollAvailableSubmissions(String destinationId, int limit, int offset);
/** /**
* Gets a specific {@link Submission}.
*
* @param submissionId the unique identifier of a {@link Submission}
*
* @return the optional submission, is empty if none was found
* *
* @param data
* @param attachment
* @param privateKey
* @return
*/ */
Optional<Submission> getSubmission(String submissionId);
Optional<SecurityEventToken> createSecurityEventToken(Data data, Attachment attachment, RSAKey privateKey); Optional<SecurityEventToken> createSecurityEventToken(Data data, Attachment attachment, RSAKey privateKey);
} }
...@@ -7,6 +7,7 @@ import de.fitko.fitconnect.client.SenderClient; ...@@ -7,6 +7,7 @@ import de.fitko.fitconnect.client.SenderClient;
import de.fitko.fitconnect.client.SubscriberClient; import de.fitko.fitconnect.client.SubscriberClient;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Optional; import java.util.Optional;
public class TestRunner { public class TestRunner {
...@@ -16,15 +17,35 @@ public class TestRunner { ...@@ -16,15 +17,35 @@ public class TestRunner {
var clientId = "781f6213-0f0f-4a79-9372-e7187ffda98b"; var clientId = "781f6213-0f0f-4a79-9372-e7187ffda98b";
var secret = "PnzR8Vbmhpv_VwTkT34wponqXWK8WBm-LADlryYdV4o"; var secret = "PnzR8Vbmhpv_VwTkT34wponqXWK8WBm-LADlryYdV4o";
// sample calls to the fluent sender client senderSample(clientId, secret);
subscriberSample(clientId, secret);
}
private static void senderSample(String clientId, String secret) {
final Optional<Submission> sentSubmission = SenderClient.builder() final Optional<Submission> sentSubmission = SenderClient.builder()
.authenticate(clientId, secret) .authenticate(clientId, secret)
.createSubmission(Submission.builder().build()) .createSubmission(Submission.builder().build())
.uploadAttachments(Collections.emptyList()) .uploadAttachments(Collections.emptyList())
.sendSubmission(Metadata.builder().build(), Data.builder().build()); .sendSubmission(Metadata.builder().build(), Data.builder().build());
}
private static void subscriberSample(String clientId, String secret) {
// #1 authenticate
var authenticatedClient = SubscriberClient.builder().authenticate(clientId, secret);
// #2 poll for available submissions
List<Submission> availableSubmissions = authenticatedClient.getAvailableSubmissions("someDestinationId");
// #3 get a submission and its data
var confirmedSubmission = authenticatedClient
.requestSubmission(Submission.builder().build())
.requestMetadata()
.requestAttachments()
.confirmSubmission();
SubscriberClient.builder() // access request submission data
.authenticate(clientId, secret); var attachments = confirmedSubmission.getAttachments();
var metadata = confirmedSubmission.getMetadata();
} }
......
...@@ -8,7 +8,6 @@ import de.fitko.fitconnect.api.domain.model.submission.Submission; ...@@ -8,7 +8,6 @@ import de.fitko.fitconnect.api.domain.model.submission.Submission;
import de.fitko.fitconnect.api.exceptions.client.AttachmentUploadError; import de.fitko.fitconnect.api.exceptions.client.AttachmentUploadError;
import de.fitko.fitconnect.api.exceptions.client.ClientNotAuthenticated; import de.fitko.fitconnect.api.exceptions.client.ClientNotAuthenticated;
import de.fitko.fitconnect.api.services.Sender; import de.fitko.fitconnect.api.services.Sender;
import de.fitko.fitconnect.api.services.metadata.MetadataService;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
...@@ -21,9 +20,7 @@ public class SenderClient extends Client { ...@@ -21,9 +20,7 @@ public class SenderClient extends Client {
private SenderClient() {} private SenderClient() {}
public static Authenticate builder() { public static Authenticate builder() {
final Sender sender = getService(Sender.class); return new ClientBuilder(getService(Sender.class));
final MetadataService metadataService = getService(MetadataService.class);
return new ClientBuilder(sender, metadataService);
} }
public interface Authenticate { public interface Authenticate {
...@@ -78,13 +75,11 @@ public class SenderClient extends Client { ...@@ -78,13 +75,11 @@ public class SenderClient extends Client {
public static class ClientBuilder implements Authenticate, AttachmentUpload, CreateSubmission, SendSubmission { public static class ClientBuilder implements Authenticate, AttachmentUpload, CreateSubmission, SendSubmission {
private final MetadataService metadataService;
private Sender sender; private Sender sender;
private Optional<OAuthToken> token; private Optional<OAuthToken> token;
private ClientBuilder(Sender sender, MetadataService metadataService) { private ClientBuilder(Sender sender) {
this.sender = sender; this.sender = sender;
this.metadataService = metadataService;
} }
@Override @Override
...@@ -96,20 +91,17 @@ public class SenderClient extends Client { ...@@ -96,20 +91,17 @@ public class SenderClient extends Client {
@Override @Override
public SendSubmission uploadAttachments(List<Attachment> attachments) { public SendSubmission uploadAttachments(List<Attachment> attachments) {
checkIfAuthenticated();
return this; return this;
} }
@Override @Override
public AttachmentUpload createSubmission(Submission submission) { public AttachmentUpload createSubmission(Submission submission) {
checkIfAuthenticated();
return this; return this;
} }
@Override @Override
public Optional<Submission> sendSubmission(Metadata metaData, Data data) { public Optional<Submission> sendSubmission(Metadata metaData, Data data) {
checkIfAuthenticated(); throw new UnsupportedOperationException("not yet implemented");
return sender.sendSubmission(Submission.builder().build());
} }
private void checkIfAuthenticated(){ private void checkIfAuthenticated(){
......
package de.fitko.fitconnect.client; package de.fitko.fitconnect.client;
import de.fitko.fitconnect.api.domain.auth.OAuthToken; import de.fitko.fitconnect.api.domain.auth.OAuthToken;
import de.fitko.fitconnect.api.domain.model.metadata.Metadata;
import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
import de.fitko.fitconnect.api.domain.model.submission.Submission;
import de.fitko.fitconnect.api.services.Subscriber; import de.fitko.fitconnect.api.services.Subscriber;
import java.util.Collections;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -18,23 +23,41 @@ public class SubscriberClient extends Client { ...@@ -18,23 +23,41 @@ public class SubscriberClient extends Client {
} }
public interface Authenticate { public interface Authenticate {
/** PollSubmissions authenticate(String clientId, String secret, String... scope);
*
* @param clientId
* @param secret
* @param scope
* @return
*/
AttachmentUpload authenticate(String clientId, String secret, String... scope);
} }
public interface AttachmentUpload { public interface PollSubmissions {
void uploadAttachments();
List<Submission> getAvailableSubmissions(String destinationId);
RequestMetadata requestSubmission(Submission submission);
}
public interface RequestMetadata {
RequestAttachments requestMetadata();
}
public interface RequestAttachments {
ConfirmSubmission requestAttachments();
}
public interface ConfirmSubmission {
AccessData confirmSubmission();
}
public interface AccessData {
Submission getSubmission();
List<Attachment> getAttachments();
Metadata getMetadata();
} }
public static class ClientBuilder implements Authenticate, AttachmentUpload{
private Subscriber subscriber; public static class ClientBuilder implements Authenticate, PollSubmissions, RequestMetadata, RequestAttachments, ConfirmSubmission, AccessData {
private final Subscriber subscriber;
private Optional<Submission> submission = Optional.empty();
private Optional<Metadata> metadata = Optional.empty();
private List<Attachment> attachments = Collections.emptyList();
private Optional<OAuthToken> token; private Optional<OAuthToken> token;
private ClientBuilder(Subscriber subscriber) { private ClientBuilder(Subscriber subscriber) {
...@@ -42,21 +65,50 @@ public class SubscriberClient extends Client { ...@@ -42,21 +65,50 @@ public class SubscriberClient extends Client {
} }
@Override @Override
public AttachmentUpload authenticate(String clientId, String secret, String... scope) { public PollSubmissions authenticate(String clientId, String secret, String... scope) {
this.token = subscriber.retrieveOAuthToken(clientId, secret, scope); this.token = subscriber.retrieveOAuthToken(clientId, secret, scope);
return this; return this;
} }
@Override @Override
public void uploadAttachments() { public List<Submission> getAvailableSubmissions(String destinationId) {
checkIfAuthenticated(); throw new UnsupportedOperationException("not yet implemented");
//metadataService.createMetadata(); }
@Override
public RequestMetadata requestSubmission(Submission submission) {
throw new UnsupportedOperationException("not yet implemented");
} }
private void checkIfAuthenticated(){
if(this.token == null || this.token.isEmpty()){ @Override
throw new IllegalStateException("Not authenticated, please authenticate first"); public RequestAttachments requestMetadata() {
} throw new UnsupportedOperationException("not yet implemented");
}
@Override
public ConfirmSubmission requestAttachments() {
throw new UnsupportedOperationException("not yet implemented");
}
@Override
public AccessData confirmSubmission() {
throw new UnsupportedOperationException("not yet implemented");
}
@Override
public Submission getSubmission() {
return this.submission.orElseThrow();
}
@Override
public List<Attachment> getAttachments() {
return this.attachments;
}
@Override
public Metadata getMetadata() {
return this.metadata.orElseThrow();
} }
} }
} }
\ No newline at end of file
...@@ -79,7 +79,7 @@ public class SubmissionSender implements Sender { ...@@ -79,7 +79,7 @@ public class SubmissionSender implements Sender {
} }
@Override @Override
public Optional<Submission> sendSubmission(Submission submission) { public Optional<Submission> sendSubmission(String submissionId, Metadata metadata) {
throw new UnsupportedOperationException("not yet implemented"); throw new UnsupportedOperationException("not yet implemented");
} }
} }
...@@ -17,6 +17,7 @@ import de.fitko.fitconnect.api.services.validation.MetadataValidator; ...@@ -17,6 +17,7 @@ import de.fitko.fitconnect.api.services.validation.MetadataValidator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Optional; import java.util.Optional;
...@@ -68,7 +69,12 @@ public class SubmissionSubscriber implements Subscriber { ...@@ -68,7 +69,12 @@ public class SubmissionSubscriber implements Subscriber {
} }
@Override @Override
public Optional<Submission> getSubmission(String submissionId, String attachmentId) { public List<Submission> pollAvailableSubmissions(String destinationId, int limit, int offset) {
throw new UnsupportedOperationException("not yet implemented");
}
@Override
public Optional<Submission> getSubmission(String submissionId) {
throw new UnsupportedOperationException("not yet implemented"); throw new UnsupportedOperationException("not yet implemented");
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment