From 7c2c93e9c85122a22ea62e5c373c8607e41fee5b Mon Sep 17 00:00:00 2001
From: Martin Vogel <martin.vogel@sinc.de>
Date: Mon, 13 Jun 2022 12:57:52 +0200
Subject: [PATCH] #414 Use lombock annotations to enable value convenient
 classes

---
 .../metadata/AdditionalReferenceInfo.java     | 20 +++---
 .../metadata/AuthenticationInformation.java   |  7 +-
 .../api/domain/metadata/ContentStructure.java | 20 +++---
 .../api/domain/metadata/Metadata.java         | 36 +++++-----
 .../domain/metadata/PaymentInformation.java   |  7 +-
 .../domain/metadata/PublicServiceType.java    | 24 ++++---
 .../api/domain/metadata/ReplyChannel.java     |  7 +-
 .../metadata/attachment/Attachment.java       | 40 ++++++-----
 .../signature/EidasAdesProfile.java           |  5 +-
 .../attachment/signature/Hash__1.java         | 21 +++---
 .../attachment/signature/SignatureFormat.java |  3 +-
 .../attachment/signature/Signature__1.java    | 29 ++++----
 .../metadata/attachment/signature/Type.java   |  3 +-
 .../api/domain/metadata/data/Data.java        | 25 +++----
 .../metadata/data/EidasAdesProfile.java       |  5 +-
 .../api/domain/metadata/data/Hash.java        | 21 +++---
 .../api/domain/metadata/data/MimeType.java    |  3 +-
 .../api/domain/metadata/data/Signature.java   | 28 ++++----
 .../domain/metadata/data/SignatureFormat.java |  3 +-
 .../metadata/data/SubmissionSchema.java       | 21 +++---
 .../api/domain/metadata/data/Type.java        |  3 +-
 .../api/domain/submission/Submission.java     |  9 +++
 .../fitconnect/client/FitConnectClient.java   | 66 +++++++++++++++++++
 .../client/FitConnectSenderClient.java        | 51 --------------
 .../java/de/fitconnect/client/TestRunner.java | 14 ++--
 .../impl/crypto/JWECryptoServiceTest.java     |  1 -
 26 files changed, 274 insertions(+), 198 deletions(-)
 create mode 100644 api/src/main/java/fitconnect/api/domain/submission/Submission.java
 create mode 100644 client/src/main/java/de/fitconnect/client/FitConnectClient.java
 delete mode 100644 client/src/main/java/de/fitconnect/client/FitConnectSenderClient.java

diff --git a/api/src/main/java/fitconnect/api/domain/metadata/AdditionalReferenceInfo.java b/api/src/main/java/fitconnect/api/domain/metadata/AdditionalReferenceInfo.java
index b55e7df9e..c694fefd3 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/AdditionalReferenceInfo.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/AdditionalReferenceInfo.java
@@ -4,6 +4,8 @@ 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.Getter;
+import lombok.Setter;
 
 import java.util.Map;
 
@@ -16,15 +18,17 @@ import java.util.Map;
         "senderReference",
         "applicationDate"
 })
-public record AdditionalReferenceInfo(
+@Getter
+@Setter
+public class AdditionalReferenceInfo {
 
-        @JsonProperty("senderReference")
-        String senderReference,
+    @JsonProperty("senderReference")
+    String senderReference;
 
-        @JsonProperty("applicationDate")
-        String applicationDate,
+    @JsonProperty("applicationDate")
+    String applicationDate;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
 
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/AuthenticationInformation.java b/api/src/main/java/fitconnect/api/domain/metadata/AuthenticationInformation.java
index e20ceb3e3..6dc93fd9b 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/AuthenticationInformation.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/AuthenticationInformation.java
@@ -1,4 +1,9 @@
 package fitconnect.api.domain.metadata;
 
-public record AuthenticationInformation() {
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AuthenticationInformation {
 }
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/ContentStructure.java b/api/src/main/java/fitconnect/api/domain/metadata/ContentStructure.java
index a25a9f89e..093f78e4d 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/ContentStructure.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/ContentStructure.java
@@ -6,6 +6,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import fitconnect.api.domain.metadata.attachment.Attachment;
 import fitconnect.api.domain.metadata.data.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.util.List;
 import java.util.Map;
@@ -18,14 +20,16 @@ import java.util.Map;
         "data",
         "attachments"
 })
-public record ContentStructure(
+@Getter
+@Setter
+public class ContentStructure {
 
-        @JsonProperty("data")
-        Data data,
+    @JsonProperty("data")
+    Data data;
 
-        @JsonProperty("attachments")
-        List<Attachment> attachments,
+    @JsonProperty("attachments")
+    List<Attachment> attachments;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
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 889f0c465..4af121a2c 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,8 @@ 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.Getter;
+import lombok.Setter;
 
 import java.util.List;
 import java.util.Map;
@@ -17,26 +19,28 @@ import java.util.Map;
         "replyChannel",
         "additionalReferenceInfo"
 })
-public record Metadata(
-        @JsonProperty("contentStructure")
-        ContentStructure contentStructure,
+@Getter
+@Setter
+public class Metadata {
+    @JsonProperty("contentStructure")
+    ContentStructure contentStructure;
 
-        @JsonProperty("publicServiceType")
-        PublicServiceType publicServiceType,
+    @JsonProperty("publicServiceType")
+    PublicServiceType publicServiceType;
 
-        @JsonProperty("authenticationInformation")
-        List<AuthenticationInformation> authenticationInformation,
+    @JsonProperty("authenticationInformation")
+    List<AuthenticationInformation> authenticationInformation;
 
-        @JsonProperty("paymentInformation")
-        PaymentInformation paymentInformation,
+    @JsonProperty("paymentInformation")
+    PaymentInformation paymentInformation;
 
-        @JsonProperty("replyChannel")
-        ReplyChannel replyChannel,
+    @JsonProperty("replyChannel")
+    ReplyChannel replyChannel;
 
-        @JsonProperty("additionalReferenceInfo")
-        AdditionalReferenceInfo additionalReferenceInfo,
+    @JsonProperty("additionalReferenceInfo")
+    AdditionalReferenceInfo additionalReferenceInfo;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
 
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/PaymentInformation.java b/api/src/main/java/fitconnect/api/domain/metadata/PaymentInformation.java
index 3e78e452a..3c911876d 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/PaymentInformation.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/PaymentInformation.java
@@ -1,4 +1,9 @@
 package fitconnect.api.domain.metadata;
 
-public record PaymentInformation() {
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class PaymentInformation {
 }
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/PublicServiceType.java b/api/src/main/java/fitconnect/api/domain/metadata/PublicServiceType.java
index d91252768..e3a915022 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/PublicServiceType.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/PublicServiceType.java
@@ -4,6 +4,8 @@ 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.Getter;
+import lombok.Setter;
 
 import java.util.Map;
 
@@ -20,18 +22,20 @@ import java.util.Map;
         "description",
         "identifier"
 })
-public record PublicServiceType(
+@Getter
+@Setter
+public class PublicServiceType {
 
-        @JsonProperty("name")
-        String name,
+    @JsonProperty("name")
+    String name;
 
-        @JsonProperty("description")
-        String description,
+    @JsonProperty("description")
+    String description;
 
-        @JsonProperty("identifier")
-        String identifier,
+    @JsonProperty("identifier")
+    String identifier;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
 
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/ReplyChannel.java b/api/src/main/java/fitconnect/api/domain/metadata/ReplyChannel.java
index 9384433d0..49802151d 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/ReplyChannel.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/ReplyChannel.java
@@ -1,4 +1,9 @@
 package fitconnect.api.domain.metadata;
 
-public record ReplyChannel() {
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ReplyChannel {
 }
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/attachment/Attachment.java b/api/src/main/java/fitconnect/api/domain/metadata/attachment/Attachment.java
index a83ab7b98..dc2ffca95 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/attachment/Attachment.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/attachment/Attachment.java
@@ -6,6 +6,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import fitconnect.api.domain.metadata.attachment.signature.Hash__1;
 import fitconnect.api.domain.metadata.attachment.signature.Signature__1;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.util.Map;
 import java.util.UUID;
@@ -24,31 +26,33 @@ import java.util.UUID;
         "mimeType",
         "attachmentId"
 })
-public record Attachment(
+@Getter
+@Setter
+public class Attachment {
 
-        @JsonProperty("hash")
-        Hash__1 hash,
+    @JsonProperty("hash")
+    Hash__1 hash;
 
-        @JsonProperty("signature")
-        Signature__1 signature,
+    @JsonProperty("signature")
+    Signature__1 signature;
 
-        @JsonProperty("purpose")
-        Purpose purpose,
+    @JsonProperty("purpose")
+    Purpose purpose;
 
-        @JsonProperty("filename")
-        String filename,
+    @JsonProperty("filename")
+    String filename;
 
-        @JsonProperty("description")
-        String description,
+    @JsonProperty("description")
+    String description;
 
-        @JsonProperty("mimeType")
-        String mimeType,
+    @JsonProperty("mimeType")
+    String mimeType;
 
-        @JsonProperty("attachmentId")
-        UUID attachmentId,
+    @JsonProperty("attachmentId")
+    UUID attachmentId;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
 
 
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/EidasAdesProfile.java b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/EidasAdesProfile.java
index c601b49bd..a72b5e8f9 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/EidasAdesProfile.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/EidasAdesProfile.java
@@ -8,9 +8,8 @@ import java.util.Map;
 
 /**
  * Referenziert ein eindeutiges Profil einer AdES (advanced electronic signature/seal) gemäß eIDAS-Verordnung über eine URI gemäß [ETSI TS 119 192](https://www.etsi.org/deliver/etsi_ts/119100_119199/119192/01.01.01_60/ts_119192v010101p.pdf).
- *
+ * <p>
  * Für die Details zur Verwendung und Validierung von Profilen siehe auch https://ec.europa.eu/cefdigital/DSS/webapp-demo/doc/dss-documentation.html#_signatures_profile_simplification
- *
  */
 public enum EidasAdesProfile {
 
@@ -22,7 +21,7 @@ public enum EidasAdesProfile {
     private final static Map<String, EidasAdesProfile> CONSTANTS = new HashMap<String, EidasAdesProfile>();
 
     static {
-        for (EidasAdesProfile c: values()) {
+        for (EidasAdesProfile c : values()) {
             CONSTANTS.put(c.value, c);
         }
     }
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Hash__1.java b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Hash__1.java
index 879235474..407366428 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Hash__1.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Hash__1.java
@@ -4,10 +4,11 @@ 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.Getter;
+import lombok.Setter;
 
 import java.util.Map;
 
-
 /**
  * Hashwert
  * <p>
@@ -19,15 +20,17 @@ import java.util.Map;
         "type",
         "content"
 })
-public record Hash__1(
+@Getter
+@Setter
+public class Hash__1 {
 
-        @JsonProperty("type")
-        Type type,
+    @JsonProperty("type")
+    Type type;
 
-        @JsonProperty("content")
-        String content,
+    @JsonProperty("content")
+    String content;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
 
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/SignatureFormat.java b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/SignatureFormat.java
index 9df5dd4ee..9bf563df3 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/SignatureFormat.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/SignatureFormat.java
@@ -8,7 +8,6 @@ import java.util.Map;
 
 /**
  * Beschreibt, welches Signaturformat die genutzte Signatur / das genutzte Siegel nutzt. Aktuell wird die Hinterlegung folgender Signaturformate unterstützt: CMS = Cryptographic Message Syntax, Asic = Associated Signature Containers, PDF = PDF Signatur, XML = XML-Signature, JSON = JSON Web Signature.
- *
  */
 public enum SignatureFormat {
 
@@ -21,7 +20,7 @@ public enum SignatureFormat {
     private final static Map<String, SignatureFormat> CONSTANTS = new HashMap<>();
 
     static {
-        for (SignatureFormat c: values()) {
+        for (SignatureFormat c : values()) {
             CONSTANTS.put(c.value, c);
         }
     }
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Signature__1.java b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Signature__1.java
index e35b63a10..2708095c7 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Signature__1.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Signature__1.java
@@ -4,13 +4,14 @@ 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.Getter;
+import lombok.Setter;
 
 import java.util.Map;
 
 
 /**
  * Beschreibt das Signaturformt und Profile
- *
  */
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
@@ -19,21 +20,23 @@ import java.util.Map;
         "detachedSignature",
         "content"
 })
-public record Signature__1(
+@Getter
+@Setter
+public class Signature__1 {
 
-        @JsonProperty("signatureFormat")
-        SignatureFormat signatureFormat,
+    @JsonProperty("signatureFormat")
+    SignatureFormat signatureFormat;
 
-        @JsonProperty("eidasAdesProfile")
-        EidasAdesProfile eidasAdesProfile,
+    @JsonProperty("eidasAdesProfile")
+    EidasAdesProfile eidasAdesProfile;
 
-        @JsonProperty("detachedSignature")
-        Boolean detachedSignature,
+    @JsonProperty("detachedSignature")
+    Boolean detachedSignature;
 
-        @JsonProperty("content")
-        String content,
+    @JsonProperty("content")
+    String content;
 
-        @JsonIgnore
-         Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
 
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Type.java b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Type.java
index e14d3aa86..a9fc941bc 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Type.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/attachment/signature/Type.java
@@ -8,7 +8,6 @@ import java.util.Map;
 
 /**
  * Der verwendete Hash-Algorithmus. Derzeit ist nur `sha512` erlaubt.
- *
  */
 public enum Type {
 
@@ -17,7 +16,7 @@ public enum Type {
     private final static Map<String, Type> CONSTANTS = new HashMap<>();
 
     static {
-        for (Type c: values()) {
+        for (Type c : values()) {
             CONSTANTS.put(c.value, c);
         }
     }
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 d43ef300c..7e830f2d1 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,12 +4,13 @@ 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.Getter;
+import lombok.Setter;
 
 import java.util.Map;
 
 /**
  * Definiert das Schema und die Signatur(-art), die für die Fachdaten verwendet werden.
- *
  */
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
@@ -17,18 +18,20 @@ import java.util.Map;
         "hash",
         "submissionSchema"
 })
-public record Data(
+@Getter
+@Setter
+public class Data {
 
-        @JsonProperty("signature")
-        Signature signature,
+    @JsonProperty("signature")
+    Signature signature;
 
-        @JsonProperty("hash")
-        Hash hash,
+    @JsonProperty("hash")
+    Hash hash;
 
-        @JsonProperty("submissionSchema")
-        SubmissionSchema submissionSchema,
+    @JsonProperty("submissionSchema")
+    SubmissionSchema submissionSchema;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
 
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/data/EidasAdesProfile.java b/api/src/main/java/fitconnect/api/domain/metadata/data/EidasAdesProfile.java
index 3e19a0aa2..51723dd5d 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/data/EidasAdesProfile.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/data/EidasAdesProfile.java
@@ -8,9 +8,8 @@ import java.util.Map;
 
 /**
  * Referenziert ein eindeutiges Profil einer AdES (advanced electronic signature/seal) gemäß eIDAS-Verordnung über eine URI gemäß [ETSI TS 119 192](https://www.etsi.org/deliver/etsi_ts/119100_119199/119192/01.01.01_60/ts_119192v010101p.pdf).
- *
+ * <p>
  * Für die Details zur Verwendung und Validierung von Profilen siehe auch https://ec.europa.eu/cefdigital/DSS/webapp-demo/doc/dss-documentation.html#_signatures_profile_simplification
- *
  */
 public enum EidasAdesProfile {
 
@@ -23,7 +22,7 @@ public enum EidasAdesProfile {
     private final static Map<String, EidasAdesProfile> CONSTANTS = new HashMap<>();
 
     static {
-        for (EidasAdesProfile c: values()) {
+        for (EidasAdesProfile c : values()) {
             CONSTANTS.put(c.value, c);
         }
     }
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/data/Hash.java b/api/src/main/java/fitconnect/api/domain/metadata/data/Hash.java
index 700055224..815f1a489 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/data/Hash.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/data/Hash.java
@@ -4,6 +4,8 @@ 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.Getter;
+import lombok.Setter;
 
 import java.util.Map;
 
@@ -12,21 +14,22 @@ import java.util.Map;
  * Hashwert
  * <p>
  * Der Hashwert der unverschlüsselten Fachdaten. Die Angabe des Hashwertes dient der Integritätssicherung des Gesamtantrags und schützt vor einem Austausch der Fachdaten durch Systeme zwischen Sender und Subscriber (z.B. dem Zustelldienst).
- *
  */
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
         "type",
         "content"
 })
-public record Hash(
+@Getter
+@Setter
+public class Hash {
 
-        @JsonProperty("type")
-        Type type,
+    @JsonProperty("type")
+    Type type;
 
-        @JsonProperty("content")
-        String content,
+    @JsonProperty("content")
+    String content;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-){ }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/data/MimeType.java b/api/src/main/java/fitconnect/api/domain/metadata/data/MimeType.java
index 6c3aa7376..026beced7 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/data/MimeType.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/data/MimeType.java
@@ -8,7 +8,6 @@ import java.util.Map;
 
 /**
  * Mimetype (z.B. application/json oder application/xml) des referenzierten Schemas (z.B. XSD- oder JSON-Schema).
- *
  */
 public enum MimeType {
 
@@ -18,7 +17,7 @@ public enum MimeType {
     private final static Map<String, MimeType> CONSTANTS = new HashMap<>();
 
     static {
-        for (MimeType c: values()) {
+        for (MimeType c : values()) {
             CONSTANTS.put(c.value, c);
         }
     }
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/data/Signature.java b/api/src/main/java/fitconnect/api/domain/metadata/data/Signature.java
index 8a7fe7278..72f1ad881 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/data/Signature.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/data/Signature.java
@@ -4,6 +4,8 @@ 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.Getter;
+import lombok.Setter;
 
 import java.util.Map;
 
@@ -17,21 +19,23 @@ import java.util.Map;
         "detachedSignature",
         "content"
 })
-public record Signature(
+@Getter
+@Setter
+public class Signature {
 
-        @JsonProperty("signatureFormat")
-        SignatureFormat signatureFormat,
+    @JsonProperty("signatureFormat")
+    SignatureFormat signatureFormat;
 
-        @JsonProperty("eidasAdesProfile")
-        EidasAdesProfile eidasAdesProfile,
+    @JsonProperty("eidasAdesProfile")
+    EidasAdesProfile eidasAdesProfile;
 
-        @JsonProperty("detachedSignature")
-        Boolean detachedSignature,
+    @JsonProperty("detachedSignature")
+    Boolean detachedSignature;
 
-        @JsonProperty("content")
-        String content,
-        @JsonIgnore
-        Map<String, Object> additionalProperties
+    @JsonProperty("content")
+    String content;
 
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
 
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/data/SignatureFormat.java b/api/src/main/java/fitconnect/api/domain/metadata/data/SignatureFormat.java
index 87053dd92..de5b96c06 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/data/SignatureFormat.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/data/SignatureFormat.java
@@ -8,7 +8,6 @@ import java.util.Map;
 
 /**
  * Beschreibt, welches Signaturformat die genutzte Signatur / das genutzte Siegel nutzt. Aktuell wird die Hinterlegung folgender Signaturformate unterstützt: CMS = Cryptographic Message Syntax, Asic = Associated Signature Containers, PDF = PDF Signatur, XML = XML-Signature, JSON = JSON Web Signature.
- *
  */
 public enum SignatureFormat {
 
@@ -21,7 +20,7 @@ public enum SignatureFormat {
     private final static Map<String, SignatureFormat> CONSTANTS = new HashMap<>();
 
     static {
-        for (SignatureFormat c: values()) {
+        for (SignatureFormat c : values()) {
             CONSTANTS.put(c.value, c);
         }
     }
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/data/SubmissionSchema.java b/api/src/main/java/fitconnect/api/domain/metadata/data/SubmissionSchema.java
index b62f222e0..c2f76da4f 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/data/SubmissionSchema.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/data/SubmissionSchema.java
@@ -4,6 +4,8 @@ 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.Getter;
+import lombok.Setter;
 
 import java.net.URI;
 import java.util.Map;
@@ -13,21 +15,22 @@ import java.util.Map;
  * Fachdatenschema
  * <p>
  * Referenz auf ein Schema, das die Struktur der Fachdaten einer Einreichung beschreibt.
- *
  */
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
         "schemaUri",
         "mimeType"
 })
-public record SubmissionSchema(
+@Getter
+@Setter
+public class SubmissionSchema {
 
-        @JsonProperty("schemaUri")
-        URI schemaUri,
+    @JsonProperty("schemaUri")
+    URI schemaUri;
 
-        @JsonProperty("mimeType")
-        MimeType mimeType,
+    @JsonProperty("mimeType")
+    MimeType mimeType;
 
-        @JsonIgnore
-        Map<String, Object> additionalProperties
-) { }
+    @JsonIgnore
+    Map<String, Object> additionalProperties;
+}
diff --git a/api/src/main/java/fitconnect/api/domain/metadata/data/Type.java b/api/src/main/java/fitconnect/api/domain/metadata/data/Type.java
index b6f5c1b68..4f91c120e 100644
--- a/api/src/main/java/fitconnect/api/domain/metadata/data/Type.java
+++ b/api/src/main/java/fitconnect/api/domain/metadata/data/Type.java
@@ -8,7 +8,6 @@ import java.util.Map;
 
 /**
  * Der verwendete Hash-Algorithmus. Derzeit ist nur `sha512` erlaubt.
- *
  */
 public enum Type {
 
@@ -17,7 +16,7 @@ public enum Type {
     private final static Map<String, Type> CONSTANTS = new HashMap<>();
 
     static {
-        for (Type c: values()) {
+        for (Type c : values()) {
             CONSTANTS.put(c.value, c);
         }
     }
diff --git a/api/src/main/java/fitconnect/api/domain/submission/Submission.java b/api/src/main/java/fitconnect/api/domain/submission/Submission.java
new file mode 100644
index 000000000..174438594
--- /dev/null
+++ b/api/src/main/java/fitconnect/api/domain/submission/Submission.java
@@ -0,0 +1,9 @@
+package fitconnect.api.domain.submission;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class Submission {
+}
diff --git a/client/src/main/java/de/fitconnect/client/FitConnectClient.java b/client/src/main/java/de/fitconnect/client/FitConnectClient.java
new file mode 100644
index 000000000..c89bb525e
--- /dev/null
+++ b/client/src/main/java/de/fitconnect/client/FitConnectClient.java
@@ -0,0 +1,66 @@
+package de.fitconnect.client;
+
+import fitconnect.api.Sender;
+import fitconnect.api.auth.OAuthToken;
+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 java.util.List;
+import java.util.Optional;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class FitConnectClient {
+
+    private static final Logger logger = SdkLogger.defaultLogger(FitConnectClient.class);
+
+    private final Sender sender;
+    private Optional<OAuthToken> token = Optional.empty();
+
+    public FitConnectClient(){
+        this.sender = ClientFactory.submissionSender();
+    }
+    
+    public FitConnectClient authenticate(String clientId, String secret, String...scope){
+        this.token = sender.retrieveOAuthToken(clientId,secret,scope);
+        return this;
+    }
+
+    public FitConnectClient createSubmission(final Submission submission){
+        checkIfAuthenticated();
+        // TODO implement sendSubmission
+        logger.log(Level.INFO, "created new submission");
+        return this;
+    }
+
+    public FitConnectClient sendSubmission(final Metadata metadata, final Data data){
+        checkIfAuthenticated();
+        // TODO implement
+        logger.log(Level.INFO, "successfully sent submission");
+
+        return this;
+    }
+
+    public FitConnectClient uploadAttachments(final List<Attachment> attachments){
+        checkIfAuthenticated();
+        // TODO implement
+        logger.log(Level.INFO, "uploaded " + attachments.size() + " attachments");
+        return this;
+    }
+
+    public FitConnectClient printToken(){
+        checkIfAuthenticated();
+        logger.log(Level.INFO, "retrieved access token: " + this.token.get().access_token());
+        return this;
+    }
+
+    private void checkIfAuthenticated() {
+        if(token.isEmpty()){
+            throw new IllegalStateException("not authenticated, please authenticate first with authenticate(client, secret)");
+        }
+    }
+
+}
diff --git a/client/src/main/java/de/fitconnect/client/FitConnectSenderClient.java b/client/src/main/java/de/fitconnect/client/FitConnectSenderClient.java
deleted file mode 100644
index a1643802a..000000000
--- a/client/src/main/java/de/fitconnect/client/FitConnectSenderClient.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package de.fitconnect.client;
-
-import fitconnect.api.Sender;
-import fitconnect.api.auth.OAuthToken;
-import fitconnect.api.logger.SdkLogger;
-
-import java.util.Optional;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-public class FitConnectSenderClient {
-
-    private static final Logger logger = SdkLogger.defaultLogger(FitConnectSenderClient.class);
-
-    private final Sender sender;
-    private Optional<OAuthToken> token = Optional.empty();
-
-    public FitConnectSenderClient(){
-        this.sender = ClientFactory.submissionSender();
-    }
-    
-    public FitConnectSenderClient authenticate(String clientId, String secret, String...scope){
-        this.token = sender.retrieveOAuthToken(clientId,secret,scope);
-        return this;
-    }
-
-    public FitConnectSenderClient createSubmission(){
-        checkIfAuthenticated();
-        // TODO implement
-        return this;
-    }
-
-    public FitConnectSenderClient sendSubmission(){
-        checkIfAuthenticated();
-        // TODO implement
-        return this;
-    }
-
-    public FitConnectSenderClient printToken(){
-        checkIfAuthenticated();
-        logger.log(Level.INFO, "retrieved access token: " + this.token.get().access_token());
-        return this;
-    }
-
-    private void checkIfAuthenticated() {
-        if(token.isEmpty()){
-            throw new IllegalStateException("authenticate first");
-        }
-    }
-
-}
diff --git a/client/src/main/java/de/fitconnect/client/TestRunner.java b/client/src/main/java/de/fitconnect/client/TestRunner.java
index 98c943680..7a82becde 100644
--- a/client/src/main/java/de/fitconnect/client/TestRunner.java
+++ b/client/src/main/java/de/fitconnect/client/TestRunner.java
@@ -1,5 +1,9 @@
 package de.fitconnect.client;
 
+import fitconnect.api.domain.submission.Submission;
+
+import java.util.Collections;
+
 public class TestRunner {
 
     public static void main(String[] args) {
@@ -7,12 +11,14 @@ public class TestRunner {
         var clientId = "781f6213-0f0f-4a79-9372-e7187ffda98b";
         var secret = "PnzR8Vbmhpv_VwTkT34wponqXWK8WBm-LADlryYdV4o";
 
-        FitConnectSenderClient senderClient = new FitConnectSenderClient();
+        FitConnectClient client = new FitConnectClient();
 
         // sample high -level- api calls to send a submission
-        senderClient.authenticate(clientId,secret)
+        client
                 .printToken()
-                .createSubmission()
-                .sendSubmission();
+                .authenticate(clientId,secret)
+                .createSubmission(new Submission())
+                .uploadAttachments(Collections.emptyList())
+                .sendSubmission(null, null);
     }
 }
diff --git a/impl/src/test/java/fitconnect/impl/crypto/JWECryptoServiceTest.java b/impl/src/test/java/fitconnect/impl/crypto/JWECryptoServiceTest.java
index c0f1d6f11..c4b382f80 100644
--- a/impl/src/test/java/fitconnect/impl/crypto/JWECryptoServiceTest.java
+++ b/impl/src/test/java/fitconnect/impl/crypto/JWECryptoServiceTest.java
@@ -5,7 +5,6 @@ import com.nimbusds.jose.jwk.KeyUse;
 import com.nimbusds.jose.jwk.RSAKey;
 import com.nimbusds.jose.jwk.gen.RSAKeyGenerator;
 import fitconnect.api.crypto.CryptoService;
-import fitconnect.api.exceptions.EncryptionException;
 import org.junit.jupiter.api.Test;
 
 import java.util.UUID;
-- 
GitLab