From a11ba14be2486261ed0c19bfee14257b0b3643bd Mon Sep 17 00:00:00 2001 From: Martin Vogel <martin.vogel@sinc.de> Date: Mon, 13 Jun 2022 17:57:52 +0200 Subject: [PATCH] #414 Load custom logger via SPI --- .../api/domain/metadata/Metadata.java | 2 ++ .../api/domain/metadata/data/Data.java | 2 ++ .../api/domain/submission/Callback.java | 20 +++++++++++++++ .../api/domain/submission/ServiceType.java | 21 ++++++++++++++++ .../api/domain/submission/Submission.java | 25 +++++++++++++++++++ .../api/logger/LoggingProvider.java | 18 +++++++++++++ .../java/fitconnect/api/logger/SdkLogger.java | 13 ---------- .../fitconnect/client/FitConnectClient.java | 4 +-- .../java/de/fitconnect/client/TestRunner.java | 9 ++++--- .../fitconnect/impl/SubmissionSender.java | 2 +- .../fitconnect/impl/SubmissionSubscriber.java | 2 +- .../impl/auth/FitCoAuthService.java | 2 +- .../impl/logger/DefaultLoggingProvider.java | 13 ++++++++++ .../fitconnect/impl/logger/SdkLogger.java | 22 ++++++++++++++++ .../fitconnect.api.logger.LoggingProvider | 1 + .../impl/auth/OAuthTokenIntegrationTest.java | 6 ++--- 16 files changed, 137 insertions(+), 25 deletions(-) create mode 100644 api/src/main/java/fitconnect/api/domain/submission/Callback.java create mode 100644 api/src/main/java/fitconnect/api/domain/submission/ServiceType.java create mode 100644 api/src/main/java/fitconnect/api/logger/LoggingProvider.java delete mode 100644 api/src/main/java/fitconnect/api/logger/SdkLogger.java create mode 100644 impl/src/main/java/fitconnect/impl/logger/DefaultLoggingProvider.java create mode 100644 impl/src/main/java/fitconnect/impl/logger/SdkLogger.java create mode 100644 impl/src/main/resources/META-INF/services/fitconnect.api.logger.LoggingProvider diff --git a/api/src/main/java/fitconnect/api/domain/metadata/Metadata.java b/api/src/main/java/fitconnect/api/domain/metadata/Metadata.java index 4af121a2c..74705e388 100644 --- a/api/src/main/java/fitconnect/api/domain/metadata/Metadata.java +++ b/api/src/main/java/fitconnect/api/domain/metadata/Metadata.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.Builder; import lombok.Getter; import lombok.Setter; @@ -21,6 +22,7 @@ import java.util.Map; }) @Getter @Setter +@Builder public class Metadata { @JsonProperty("contentStructure") ContentStructure contentStructure; diff --git a/api/src/main/java/fitconnect/api/domain/metadata/data/Data.java b/api/src/main/java/fitconnect/api/domain/metadata/data/Data.java index 7e830f2d1..159655d37 100644 --- a/api/src/main/java/fitconnect/api/domain/metadata/data/Data.java +++ b/api/src/main/java/fitconnect/api/domain/metadata/data/Data.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.Builder; import lombok.Getter; import lombok.Setter; @@ -20,6 +21,7 @@ import java.util.Map; }) @Getter @Setter +@Builder public class Data { @JsonProperty("signature") diff --git a/api/src/main/java/fitconnect/api/domain/submission/Callback.java b/api/src/main/java/fitconnect/api/domain/submission/Callback.java new file mode 100644 index 000000000..b45643172 --- /dev/null +++ b/api/src/main/java/fitconnect/api/domain/submission/Callback.java @@ -0,0 +1,20 @@ +package fitconnect.api.domain.submission; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import lombok.Value; + +import java.net.URI; + +@Getter +@Setter +@Value +public class Callback { + + @JsonProperty("uri") + URI uri; + + @JsonProperty("secret") + String secret; +} diff --git a/api/src/main/java/fitconnect/api/domain/submission/ServiceType.java b/api/src/main/java/fitconnect/api/domain/submission/ServiceType.java new file mode 100644 index 000000000..c3d3b2e1f --- /dev/null +++ b/api/src/main/java/fitconnect/api/domain/submission/ServiceType.java @@ -0,0 +1,21 @@ +package fitconnect.api.domain.submission; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import lombok.Value; + +@Getter +@Setter +@Value +public class ServiceType { + + @JsonProperty("name") + String name; + + @JsonProperty("description") + String description; + + @JsonProperty("identifier") + String identifier; +} diff --git a/api/src/main/java/fitconnect/api/domain/submission/Submission.java b/api/src/main/java/fitconnect/api/domain/submission/Submission.java index 174438594..7aa806e37 100644 --- a/api/src/main/java/fitconnect/api/domain/submission/Submission.java +++ b/api/src/main/java/fitconnect/api/domain/submission/Submission.java @@ -1,9 +1,34 @@ package fitconnect.api.domain.submission; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; import lombok.Getter; import lombok.Setter; +import lombok.Value; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; @Getter @Setter +@Value +@Builder public class Submission { + + @JsonProperty("destinationId") + UUID destinationId; + + @JsonProperty("destinationId") + Optional<UUID> caseId; + + @JsonProperty("announcedAttachments") + List<UUID> announcedAttachments; + + @JsonProperty("serviceType") + ServiceType serviceType; + + @JsonProperty("callback") + Callback callback; + } diff --git a/api/src/main/java/fitconnect/api/logger/LoggingProvider.java b/api/src/main/java/fitconnect/api/logger/LoggingProvider.java new file mode 100644 index 000000000..2987c41d5 --- /dev/null +++ b/api/src/main/java/fitconnect/api/logger/LoggingProvider.java @@ -0,0 +1,18 @@ +package fitconnect.api.logger; + +import java.util.logging.Logger; + +/** + * Provider that allows to register a custom {@link Logger} implementation. + * + */ +public interface LoggingProvider { + + /** + * Creates a new custom {@link Logger}. + * + * @param name custom name for the logger + * @return Implementation of a {@link Logger} + */ + Logger createLogger(final String name); +} diff --git a/api/src/main/java/fitconnect/api/logger/SdkLogger.java b/api/src/main/java/fitconnect/api/logger/SdkLogger.java deleted file mode 100644 index c82eab60f..000000000 --- a/api/src/main/java/fitconnect/api/logger/SdkLogger.java +++ /dev/null @@ -1,13 +0,0 @@ -package fitconnect.api.logger; - - -import java.util.logging.Logger; - -public final class SdkLogger { - - // TODO make custom logging module injectable / load via SPI - - public static Logger defaultLogger(final Class clazz) { - return Logger.getLogger(clazz.getName()); - } -} diff --git a/client/src/main/java/de/fitconnect/client/FitConnectClient.java b/client/src/main/java/de/fitconnect/client/FitConnectClient.java index 4e88a9dad..d13bcfe9b 100644 --- a/client/src/main/java/de/fitconnect/client/FitConnectClient.java +++ b/client/src/main/java/de/fitconnect/client/FitConnectClient.java @@ -6,7 +6,7 @@ import fitconnect.api.domain.metadata.Metadata; import fitconnect.api.domain.metadata.attachment.Attachment; import fitconnect.api.domain.metadata.data.Data; import fitconnect.api.domain.submission.Submission; -import fitconnect.api.logger.SdkLogger; +import fitconnect.impl.logger.SdkLogger; import java.util.List; import java.util.Optional; @@ -15,7 +15,7 @@ import java.util.logging.Logger; public class FitConnectClient { - private static final Logger logger = SdkLogger.defaultLogger(FitConnectClient.class); + private static final Logger logger = SdkLogger.customLogger(FitConnectClient.class); private final Sender sender; private Optional<OAuthToken> token = Optional.empty(); diff --git a/client/src/main/java/de/fitconnect/client/TestRunner.java b/client/src/main/java/de/fitconnect/client/TestRunner.java index 7a82becde..8b01abaf9 100644 --- a/client/src/main/java/de/fitconnect/client/TestRunner.java +++ b/client/src/main/java/de/fitconnect/client/TestRunner.java @@ -1,5 +1,7 @@ package de.fitconnect.client; +import fitconnect.api.domain.metadata.Metadata; +import fitconnect.api.domain.metadata.data.Data; import fitconnect.api.domain.submission.Submission; import java.util.Collections; @@ -14,11 +16,10 @@ public class TestRunner { FitConnectClient client = new FitConnectClient(); // sample high -level- api calls to send a submission - client + client.authenticate(clientId,secret) .printToken() - .authenticate(clientId,secret) - .createSubmission(new Submission()) + .createSubmission(Submission.builder().build()) .uploadAttachments(Collections.emptyList()) - .sendSubmission(null, null); + .sendSubmission(Metadata.builder().build(), Data.builder().build()); } } diff --git a/impl/src/main/java/fitconnect/impl/SubmissionSender.java b/impl/src/main/java/fitconnect/impl/SubmissionSender.java index 559ee48c3..c60c458da 100644 --- a/impl/src/main/java/fitconnect/impl/SubmissionSender.java +++ b/impl/src/main/java/fitconnect/impl/SubmissionSender.java @@ -10,7 +10,7 @@ import fitconnect.api.domain.metadata.attachment.Attachment; import fitconnect.api.domain.metadata.data.Data; import fitconnect.api.exceptions.AuthenticationException; import fitconnect.api.exceptions.EncryptionException; -import fitconnect.api.logger.SdkLogger; +import fitconnect.impl.logger.SdkLogger; import fitconnect.api.validation.CertificateValidator; import fitconnect.api.validation.ValidationResult; import fitconnect.impl.auth.FitCoAuthService; diff --git a/impl/src/main/java/fitconnect/impl/SubmissionSubscriber.java b/impl/src/main/java/fitconnect/impl/SubmissionSubscriber.java index de4a2144a..e8eea17c7 100644 --- a/impl/src/main/java/fitconnect/impl/SubmissionSubscriber.java +++ b/impl/src/main/java/fitconnect/impl/SubmissionSubscriber.java @@ -10,7 +10,7 @@ import fitconnect.api.domain.metadata.attachment.Attachment; import fitconnect.api.domain.metadata.data.Data; import fitconnect.api.exceptions.AuthenticationException; import fitconnect.api.exceptions.DecryptionException; -import fitconnect.api.logger.SdkLogger; +import fitconnect.impl.logger.SdkLogger; import fitconnect.api.validation.MetadataValidator; import fitconnect.api.validation.ValidationResult; import fitconnect.impl.auth.FitCoAuthService; diff --git a/impl/src/main/java/fitconnect/impl/auth/FitCoAuthService.java b/impl/src/main/java/fitconnect/impl/auth/FitCoAuthService.java index e9486a5b0..5b6a8574d 100644 --- a/impl/src/main/java/fitconnect/impl/auth/FitCoAuthService.java +++ b/impl/src/main/java/fitconnect/impl/auth/FitCoAuthService.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import fitconnect.api.auth.OAuthService; import fitconnect.api.auth.OAuthToken; import fitconnect.api.exceptions.AuthenticationException; -import fitconnect.api.logger.SdkLogger; +import fitconnect.impl.logger.SdkLogger; import java.io.IOException; import java.net.URI; diff --git a/impl/src/main/java/fitconnect/impl/logger/DefaultLoggingProvider.java b/impl/src/main/java/fitconnect/impl/logger/DefaultLoggingProvider.java new file mode 100644 index 000000000..2eba4f249 --- /dev/null +++ b/impl/src/main/java/fitconnect/impl/logger/DefaultLoggingProvider.java @@ -0,0 +1,13 @@ +package fitconnect.impl.logger; + +import fitconnect.api.logger.LoggingProvider; + +import java.util.logging.Logger; + +public class DefaultLoggingProvider implements LoggingProvider { + + @Override + public Logger createLogger(final String name) { + return Logger.getLogger(name); + } +} diff --git a/impl/src/main/java/fitconnect/impl/logger/SdkLogger.java b/impl/src/main/java/fitconnect/impl/logger/SdkLogger.java new file mode 100644 index 000000000..fcd56f20b --- /dev/null +++ b/impl/src/main/java/fitconnect/impl/logger/SdkLogger.java @@ -0,0 +1,22 @@ +package fitconnect.impl.logger; + + +import fitconnect.api.logger.LoggingProvider; + +import java.util.ServiceLoader; +import java.util.logging.Logger; + +public final class SdkLogger { + + public static Logger defaultLogger(final Class clazz) { + return Logger.getLogger(clazz.getName()); + } + + // TODO find a better solution than this ;) + public static Logger customLogger(final Class clazz) { + var serviceLoader = ServiceLoader.load(LoggingProvider.class); + final LoggingProvider loggingProvider = serviceLoader.iterator().next(); + return loggingProvider.createLogger(clazz.getName()); + } + +} diff --git a/impl/src/main/resources/META-INF/services/fitconnect.api.logger.LoggingProvider b/impl/src/main/resources/META-INF/services/fitconnect.api.logger.LoggingProvider new file mode 100644 index 000000000..3f1e3b121 --- /dev/null +++ b/impl/src/main/resources/META-INF/services/fitconnect.api.logger.LoggingProvider @@ -0,0 +1 @@ +fitconnect.impl.logger.DefaultLoggingProvider \ No newline at end of file diff --git a/impl/src/test/java/fitconnect/impl/auth/OAuthTokenIntegrationTest.java b/impl/src/test/java/fitconnect/impl/auth/OAuthTokenIntegrationTest.java index b0ee8870e..5b6dcd62b 100644 --- a/impl/src/test/java/fitconnect/impl/auth/OAuthTokenIntegrationTest.java +++ b/impl/src/test/java/fitconnect/impl/auth/OAuthTokenIntegrationTest.java @@ -31,8 +31,8 @@ class OAuthTokenIntegrationTest { // Then assertTrue(token.isPresent()); - assertNull(token.get().error()); - assertNotNull(token.get().access_token()); - assertEquals(1800, token.get().expires_in()); + assertNull(token.get().getError()); + assertNotNull(token.get().getAccessToken()); + assertEquals(1800, token.get().getExpiresIn()); } } \ No newline at end of file -- GitLab