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

#414 Introduce guice dependency injection to wire all modules

parent 02716fe8
No related branches found
No related tags found
2 merge requests!2#414 Remaining changes from MR,!1planning#414 Methoden Signaturen (Zwischenstand)
......@@ -18,7 +18,11 @@
</dependency>
<dependency>
<groupId>de.fitconnect.sdk</groupId>
<artifactId>impl</artifactId>
<artifactId>dependency</artifactId>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</dependency>
</dependencies>
......
package de.fitconnect.client;
package de.fitconnect;
import de.fitconnect.client.ClientFactory;
import de.fitconnect.client.SenderClient;
import fitconnect.api.domain.model.metadata.Metadata;
import fitconnect.api.domain.model.metadata.data.Data;
import fitconnect.api.domain.model.submission.Submission;
......@@ -10,13 +12,13 @@ public class TestRunner {
public static void main(String[] args) {
final SenderClient senderClient = ClientFactory.senderClient();
var clientId = "781f6213-0f0f-4a79-9372-e7187ffda98b";
var secret = "PnzR8Vbmhpv_VwTkT34wponqXWK8WBm-LADlryYdV4o";
SenderClient client = new SenderClient();
// sample high -level- api calls to send a submission
client.authenticate(clientId,secret)
senderClient.authenticate(clientId,secret)
.printToken()
.createSubmission(Submission.builder().build())
.uploadAttachments(Collections.emptyList())
......
package de.fitconnect.client;
import com.google.inject.Guice;
import com.google.inject.Injector;
import de.fitconnect.dependency.SdkModule;
import fitconnect.api.services.Sender;
import fitconnect.api.services.Subscriber;
import fitconnect.api.services.auth.OAuthService;
import fitconnect.api.services.crypto.CryptoService;
import fitconnect.api.services.validation.CertificateValidator;
import fitconnect.api.services.validation.MetadataValidator;
import fitconnect.impl.SubmissionSender;
import fitconnect.impl.SubmissionSubscriber;
import fitconnect.impl.auth.MonoPublisherOAuthService;
import fitconnect.impl.crypto.JWECryptoService;
import fitconnect.impl.validation.KeyValidator;
import fitconnect.impl.validation.MetadataSubmissionValidator;
import java.net.http.HttpClient;
// TODO use DI Container
public class ClientFactory {
private static final String TOKEN_URL = "https://auth-testing.fit-connect.fitko.dev/token";
public static Sender submissionSender(){
final OAuthService authService = getAuthService();
final CryptoService cryptoService = getCryptoService();
final CertificateValidator certificateValidator = new KeyValidator();
return new SubmissionSender(authService, cryptoService, certificateValidator);
}
public static Subscriber submissionSubscriber(){
final OAuthService authService = getAuthService();
final CryptoService cryptoService = getCryptoService();
final MetadataValidator metadataValidator = new MetadataSubmissionValidator();
return new SubmissionSubscriber(authService, cryptoService, metadataValidator);
}
private static JWECryptoService getCryptoService() {
return new JWECryptoService();
}
private static final Injector injector = Guice.createInjector(new SdkModule());
private static MonoPublisherOAuthService getAuthService() {
return new MonoPublisherOAuthService(TOKEN_URL);
public static SenderClient senderClient(){
return new SenderClient(injector.getInstance(Sender.class));
}
}
package de.fitconnect.client;
import com.google.inject.Inject;
import fitconnect.api.services.Sender;
import fitconnect.api.domain.auth.OAuthToken;
import fitconnect.api.domain.model.metadata.Metadata;
......@@ -20,8 +21,9 @@ public class SenderClient {
private final Sender sender;
private Optional<OAuthToken> token = Optional.empty();
public SenderClient(){
this.sender = ClientFactory.submissionSender();
@Inject
public SenderClient(final Sender sender){
this.sender = sender;
}
public SenderClient authenticate(String clientId, String secret, String...scope){
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>sdk-java</artifactId>
<groupId>de.fitconnect.sdk</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dependency</artifactId>
<dependencies>
<dependency>
<groupId>de.fitconnect.sdk</groupId>
<artifactId>api</artifactId>
</dependency>
<dependency>
<groupId>de.fitconnect.sdk</groupId>
<artifactId>impl</artifactId>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package de.fitconnect.dependency;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import fitconnect.api.services.Sender;
import fitconnect.api.services.Subscriber;
import fitconnect.api.services.auth.OAuthService;
import fitconnect.api.services.crypto.CryptoService;
import fitconnect.api.services.validation.CertificateValidator;
import fitconnect.api.services.validation.MetadataValidator;
import fitconnect.impl.SubmissionSender;
import fitconnect.impl.SubmissionSubscriber;
import fitconnect.impl.auth.MonoPublisherOAuthService;
import fitconnect.impl.crypto.JWECryptoService;
import fitconnect.impl.validation.KeyValidator;
import fitconnect.impl.validation.MetadataSubmissionValidator;
public class SdkModule extends AbstractModule {
@Override
protected void configure() {
bind(CryptoService.class).to(JWECryptoService.class);
bind(CertificateValidator.class).to(KeyValidator.class);
bind(MetadataValidator.class).to(MetadataSubmissionValidator.class);
bind(Sender.class).to(SubmissionSender.class);
bind(Subscriber.class).to(SubmissionSubscriber.class);
}
@Provides
static OAuthService provideOAuthService() {
return new MonoPublisherOAuthService("https://auth-testing.fit-connect.fitko.dev/token");
}
}
......@@ -36,6 +36,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</dependency>
</dependencies>
......
package fitconnect.impl;
import com.google.inject.Inject;
import com.nimbusds.jose.jwk.RSAKey;
import fitconnect.api.services.Sender;
import fitconnect.api.services.auth.OAuthService;
......@@ -30,7 +31,9 @@ public class SubmissionSender implements Sender {
private final CertificateValidator certificateValidator;
private final CryptoService cryptoService;
public SubmissionSender(final OAuthService authService, final CryptoService encryptionService,
@Inject
public SubmissionSender(final OAuthService authService,
final CryptoService encryptionService,
final CertificateValidator certificateValidator) {
this.authService = authService;
this.cryptoService = encryptionService;
......
package fitconnect.impl;
import com.google.inject.Inject;
import com.nimbusds.jose.jwk.RSAKey;
import fitconnect.api.services.Subscriber;
import fitconnect.api.services.auth.OAuthService;
......@@ -28,8 +29,10 @@ public class SubmissionSubscriber implements Subscriber {
private final CryptoService cryptoService;
private final MetadataValidator metadataValidator;
public SubmissionSubscriber(final OAuthService authService, final CryptoService cryptoService,
MetadataValidator metadataValidator){
@Inject
public SubmissionSubscriber(final OAuthService authService,
final CryptoService cryptoService,
final MetadataValidator metadataValidator){
this.authService = authService;
this.cryptoService = cryptoService;
this.metadataValidator = metadataValidator;
......
......@@ -19,6 +19,7 @@
<module>api</module>
<module>impl</module>
<module>client</module>
<module>dependency</module>
</modules>
<dependencyManagement>
......@@ -34,6 +35,11 @@
<artifactId>impl</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>de.fitconnect.sdk</groupId>
<artifactId>dependency</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.junit</groupId>
......@@ -78,6 +84,11 @@
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
......
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