diff --git a/.reuse/dep5 b/.reuse/dep5 index 030883587b0d1e972a7e9f6231ac145b09fb5d06..337467ddde014f5e46e40e83ea75a5b3cd8b3dce 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -1,7 +1,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Files: api/src/* client/src/* cli/src/* core/src/* integration-tests/src/* - api/README.md cli/README.md core/README.md +Files: api/src/* client/src/* cli/src/* core/src/* demo/src/* integration-tests/src/* + api/README.md cli/README.md core/README.md demo/README.md README.md CHANGELOG.md SECURITY.md Copyright: 2022 FIT-Connect contributors License: EUPL-1.2 @@ -10,7 +10,7 @@ Files: .mvn/wrapper/* mvnw mvnw.cmd Copyright: 2013-2022 The Apache Software Foundation License: Apache-2.0 -Files: pom.xml api/pom.xml core/pom.xml client/pom.xml cli/pom.xml integration-tests/pom.xml +Files: pom.xml api/pom.xml core/pom.xml client/pom.xml cli/pom.xml demo/pom.xml integration-tests/pom.xml .gitlab-ci.yml .gitignore .m2/release.xml renovate.json checkstyle.xml checkstyle-suppressions.xml config.yml Copyright: 2022 FIT-Connect contributors diff --git a/demo/README.md b/demo/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e4c20578577cfaac369b115517380d86f1c21305 --- /dev/null +++ b/demo/README.md @@ -0,0 +1,30 @@ +# FIT-Connect Java-SDK Demo + +An dieser Stelle finden sich alle relevanten Links zur in der Demo genutzten Ressourcen. + +## FIT-Connect Dokumentation +- https://docs.fitko.de/fit-connect/docs +- Die [Dokumentation](https://docs.fitko.de/fit-connect/docs/receiving/destination), wie man einen Zustellpunkt (und dessen DestinationID) anlegt +- [Self-Service-Portal]( https://portal.auth-testing.fit-connect.fitko.dev/login) der Testumgebung: _(Für den Login benötigen Sie einen Gitlab- oder Github-Account)_ + +## CommandLine-Client + + - CLI-Client [Dokumentation](https://git.fitko.de/fit-connect/sdk-java/-/tree/main/cli) + - Ausführbarer [fit-connect-cli.jar](https://s01.oss.sonatype.org/content/repositories/snapshots/dev/fitko/fitconnect/sdk/cli/1.1.0-SNAPSHOT/cli-1.1.0-20230705.171100-3.jar) auf Maven Central *[1.1.0-Snapshot vom 05.07.23]*: + - Git Repository des [Demoprojekts](demo), welches das SDK einbindet: + +Das Commandline Interface kann als runnable .jar kann, wie in der [Doku](https://git.fitko.de/fit-connect/sdk-java/-/tree/main/cli) beschrieben, direkt mit `java -jar` ausgeführt werden oder als Abhängigkeit einem bestehenden Java-/Maven-Projekt hinzugefügt werden, um die Fluent-API des Java-SDK zu nutzen. + +Für beide Varianten muss das SDK über eine [Konfigurations-YAML](https://git.fitko.de/fit-connect/sdk-java/-/tree/main/config.yml) eingerichtet werden. + +## Maven Dependency + +Um das SDK in einem bestehenden Java-Projekt zu nutzen, wird die Maven-Dependency in der aktuellen Version (RC.2) der POM hinzugefügt: + +```xml +<dependency> + <groupId>dev.fitko.fitconnect.sdk</groupId> + <artifactId>client</artifactId> + <version>1.0.0-rc.2</version> +</dependency> +``` diff --git a/demo/pom.xml b/demo/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..5a999365b8b18de4fd970fe964bacee46df1487b --- /dev/null +++ b/demo/pom.xml @@ -0,0 +1,31 @@ +<?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>dev.fitko.fitconnect.sdk</groupId> + <version>1.1.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>demo</artifactId> + + <properties> + <maven.compiler.release>11</maven.compiler.release> + + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <dependencies> + <dependency> + <groupId>dev.fitko.fitconnect.sdk</groupId> + <artifactId>client</artifactId> + </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> + </dependencies> + +</project> \ No newline at end of file diff --git a/demo/src/main/java/dev/fitko/fitconnect/sdk/demo/Demo.java b/demo/src/main/java/dev/fitko/fitconnect/sdk/demo/Demo.java new file mode 100644 index 0000000000000000000000000000000000000000..f3c15ae7e17801a4bf22724176d2382ac6e587d2 --- /dev/null +++ b/demo/src/main/java/dev/fitko/fitconnect/sdk/demo/Demo.java @@ -0,0 +1,115 @@ +package dev.fitko.fitconnect.sdk.demo; + +import dev.fitko.fitconnect.api.config.ApplicationConfig; +import dev.fitko.fitconnect.api.domain.model.event.SubmissionStatus; +import dev.fitko.fitconnect.api.domain.model.event.problems.other.TechnicalError; +import dev.fitko.fitconnect.api.domain.model.replychannel.ReplyChannel; +import dev.fitko.fitconnect.api.domain.model.submission.SentSubmission; +import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup; +import dev.fitko.fitconnect.client.RouterClient; +import dev.fitko.fitconnect.client.SenderClient; +import dev.fitko.fitconnect.client.SubscriberClient; +import dev.fitko.fitconnect.client.bootstrap.ApplicationConfigLoader; +import dev.fitko.fitconnect.client.bootstrap.ClientFactory; +import dev.fitko.fitconnect.client.sender.model.Attachment; +import dev.fitko.fitconnect.client.sender.model.SendableSubmission; +import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +public class Demo { + + private static final Logger LOGGER = LoggerFactory.getLogger(Demo.class); + + final SubscriberClient subscriberClient; + final SenderClient senderClient; + final RouterClient routerClient; + + public static void main(final String[] args) { + + // config can be loaded by setting env-var FIT_CONNECT_CONFIG or directly via ApplicationConfigLoader.loadConfig("path/to/config.yml") + final var configPath = Path.of("demo/src/main/resources/config.yml"); + + // unique identifier of the destination/Zustellpunkt (https://portal.auth-testing.fit-connect.fitko.dev/destinations) + final var destinationId = UUID.fromString("DESTINATION_ID"); + + final var demo = new Demo(configPath); + + final SentSubmission submissionOne = demo.sendSubmission(destinationId); + + demo.listFirstTenSubmissions(destinationId); + demo.printStatus(submissionOne); + demo.getSubmission(submissionOne.getSubmissionId()); + demo.acceptSubmission(submissionOne.getSubmissionId()); + + final SentSubmission submissionTwo = demo.sendSubmission(destinationId); + demo.reject(submissionTwo.getSubmissionId()); + demo.printStatus(submissionTwo); + } + + Demo(final Path configPath){ + + final ApplicationConfig config = ApplicationConfigLoader.loadConfigFromPath(configPath); + + // init clients + subscriberClient = ClientFactory.getSubscriberClient(config); + senderClient = ClientFactory.getSenderClient(config); + routerClient = ClientFactory.getRouterClient(config); + } + + private void acceptSubmission(final UUID submissionId) { + subscriberClient.requestSubmission(submissionId).acceptSubmission(); + LOGGER.info("Accepted submission {}", submissionId); + } + + private void reject( final UUID submissionId) { + subscriberClient.requestSubmission(submissionId).rejectSubmission(List.of(new TechnicalError())); + LOGGER.info("Accepted submission {}", submissionId); + } + + private void printStatus(final SentSubmission sentSubmission) { + final SubmissionStatus status = senderClient.getStatusForSubmission(sentSubmission); + LOGGER.info("Current status for submission {}: {}", sentSubmission.getSubmissionId(), status.getStatus()); + } + + private void getSubmission(final UUID submissionId) { + final ReceivedSubmission receivedSubmission = subscriberClient.requestSubmission(submissionId); + LOGGER.info("Received data {}", receivedSubmission.getDataAsString()); + receivedSubmission.getAttachments().stream().map(Attachment::getDataAString).forEach(attachment -> LOGGER.info("Received attachment {}", attachment)); + + } + + private void listFirstTenSubmissions(final UUID destinationId) { + final Set<SubmissionForPickup> availableSubmissions = subscriberClient.getAvailableSubmissionsForDestination(destinationId, 0, 10); + LOGGER.info("First {} available submission of destination {}", availableSubmissions.size(), destinationId); + availableSubmissions.forEach(sub -> LOGGER.info("submission-id {}", sub.getSubmissionId())); + } + + private SentSubmission sendSubmission(final UUID destinationId) { + + final SendableSubmission submission = SendableSubmission.Builder() + .setDestination(destinationId) + .setServiceType("urn:de:fim:leika:leistung:99400048079000", "Führerscheinbeantragung") + .setJsonData( getDataAsString("/data.json"), URI.create("https://schema.fitko.de/fim/s00000114_1.1.schema.json")) + .addAttachment(Attachment.fromPath(Path.of("demo/src/main/resources/attachment.txt"), "application/text")) + .setReplyChannel(ReplyChannel.fromEmail("test@sample.org")) + .build(); + + return senderClient.send(submission); + } + + private String getDataAsString(final String path) { + try { + return new String(Demo.class.getResourceAsStream(path).readAllBytes()); + } catch (final IOException e) { + throw new RuntimeException(e.getMessage(), e); + } + } +} diff --git a/demo/src/main/resources/attachment.txt b/demo/src/main/resources/attachment.txt new file mode 100644 index 0000000000000000000000000000000000000000..b4b938d400fe7e94ca3407fa8e638b2d16f27c5f --- /dev/null +++ b/demo/src/main/resources/attachment.txt @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. \ No newline at end of file diff --git a/demo/src/main/resources/config.yml b/demo/src/main/resources/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..5a6042994b86b7939968b2691cf315441ab225ad --- /dev/null +++ b/demo/src/main/resources/config.yml @@ -0,0 +1,17 @@ +senderConfig: + clientId: "SENDER_CLIENT_ID" + clientSecret: "SENDER_CLIENT_SECRET" + +subscriberConfig: + clientId: "SUBSCRIBER_CLIENT_ID" + clientSecret: "SUBSCRIBER_CLIENT_SECRET" + privateDecryptionKeyPaths: ["path/to/private_decryption_key.json"] + privateSigningKeyPath: "path/to/private_signing_key.json" + +# Example of ow env properties van be overridden +# environments: +# TEST: +# skipSubmissionDataValidation: true +# enableAutoReject: false + +activeEnvironment: TEST diff --git a/demo/src/main/resources/data.json b/demo/src/main/resources/data.json new file mode 100644 index 0000000000000000000000000000000000000000..514fc98294ee6b2622131320d0fb5f16110bdb42 --- /dev/null +++ b/demo/src/main/resources/data.json @@ -0,0 +1,23 @@ +{ + "G00000442": { + "F00000690": "", + "G00000046": { + "F00000038": "000", + "G00000245": { + "F00000087": ["", ""] + } + } + }, + "G00000444": { + "F00000040": "2022-01-01", + "F00000011": "2023-01-01" + }, + "F00000756": "2022-01-01", + "F00000757": "", + "F00000758": true, + "F00000759": true, + "F00000760": true, + "F00000761": "", + "F00000035": "0", + "F00000008": "2022-01-01" +} diff --git a/pom.xml b/pom.xml index 42fd801297292f97ed1c43bafa1981cce9b8037c..60704b78d9fc65a785b52c66d36dce80240b58b3 100644 --- a/pom.xml +++ b/pom.xml @@ -110,6 +110,7 @@ <module>api</module> <module>core</module> <module>client</module> + <module>demo</module> </modules> <dependencyManagement> @@ -140,6 +141,12 @@ <version>${project.version}</version> </dependency> + <dependency> + <groupId>dev.fitko.fitconnect.sdk</groupId> + <artifactId>demo</artifactId> + <version>${project.version}</version> + </dependency> + <!-- FIT-Connect dependencies --> <dependency> <groupId>dev.fitko.fitconnect</groupId> @@ -482,12 +489,12 @@ </modules> </profile> <profile> - <id>cli-tests</id> + <id>demo</id> <activation> <activeByDefault>true</activeByDefault> </activation> <modules> - <module>cli</module> + <module>demo</module> </modules> </profile> <profile>