From c998443f1c68fd3c203ba6c9e37726f3d924a3fd Mon Sep 17 00:00:00 2001
From: Martin Vogel <martin.vogel@sinc.de>
Date: Thu, 22 Sep 2022 14:27:08 +0200
Subject: [PATCH] refactor(api-model): remove duplicate hash and signature type
 model classes for dat and attachment

---
 .../model/metadata/{data => }/Hash.java       |  4 +--
 .../model/metadata/{data => }/Signature.java  |  6 ++--
 ...aSignatureType.java => SignatureType.java} | 14 ++++----
 .../model/metadata/attachment/Attachment.java |  8 ++---
 .../signature/AttachmentSignatureType.java    | 35 -------------------
 .../attachment/signature/Hash__1.java         | 25 -------------
 .../attachment/signature/Signature__1.java    | 33 -----------------
 .../api/domain/model/metadata/data/Data.java  |  2 ++
 .../fitconnect/client/SubscriberClient.java   |  4 +--
 .../client/util/SubmissionUtil.java           | 14 ++++----
 .../client/SubscriberClientTest.java          |  9 +++--
 .../DefaultValidationServiceTest.java         |  8 ++---
 12 files changed, 35 insertions(+), 127 deletions(-)
 rename api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/{data => }/Hash.java (81%)
 rename api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/{data => }/Signature.java (76%)
 rename api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/{data/DataSignatureType.java => SignatureType.java} (61%)
 delete mode 100644 api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/AttachmentSignatureType.java
 delete mode 100644 api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/Hash__1.java
 delete mode 100644 api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/Signature__1.java

diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Hash.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/Hash.java
similarity index 81%
rename from api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Hash.java
rename to api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/Hash.java
index 5c65bf35b..f25bc95c4 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Hash.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/Hash.java
@@ -1,4 +1,4 @@
-package dev.fitko.fitconnect.api.domain.model.metadata.data;
+package dev.fitko.fitconnect.api.domain.model.metadata;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
@@ -14,7 +14,7 @@ import java.util.Map;
 public class Hash {
 
     @JsonProperty("type")
-    private DataSignatureType dataSignatureType;
+    private SignatureType signatureType;
 
     @JsonProperty("content")
     private String content;
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Signature.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/Signature.java
similarity index 76%
rename from api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Signature.java
rename to api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/Signature.java
index ed51af150..3acec627e 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Signature.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/Signature.java
@@ -1,15 +1,15 @@
-package dev.fitko.fitconnect.api.domain.model.metadata.data;
+package dev.fitko.fitconnect.api.domain.model.metadata;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import dev.fitko.fitconnect.api.domain.model.metadata.EidasAdesProfile;
-import dev.fitko.fitconnect.api.domain.model.metadata.SignatureFormat;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.Map;
 
 @Data
+@NoArgsConstructor
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class Signature {
 
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/DataSignatureType.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/SignatureType.java
similarity index 61%
rename from api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/DataSignatureType.java
rename to api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/SignatureType.java
index a41c74711..63397fa09 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/DataSignatureType.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/SignatureType.java
@@ -1,4 +1,4 @@
-package dev.fitko.fitconnect.api.domain.model.metadata.data;
+package dev.fitko.fitconnect.api.domain.model.metadata;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonValue;
@@ -6,21 +6,21 @@ import com.fasterxml.jackson.annotation.JsonValue;
 import java.util.HashMap;
 import java.util.Map;
 
-public enum DataSignatureType {
+public enum SignatureType {
 
     SHA_512("sha512");
 
-    private static final Map<String, DataSignatureType> CONSTANTS = new HashMap<>();
+    private static final Map<String, SignatureType> CONSTANTS = new HashMap<>();
 
     static {
-        for (final DataSignatureType c : values()) {
+        for (final SignatureType c : values()) {
             CONSTANTS.put(c.value, c);
         }
     }
 
     private final String value;
 
-    DataSignatureType(final String value) {
+    SignatureType(final String value) {
         this.value = value;
     }
 
@@ -35,8 +35,8 @@ public enum DataSignatureType {
     }
 
     @JsonCreator
-    public static DataSignatureType fromValue(final String value) {
-        final DataSignatureType constant = CONSTANTS.get(value);
+    public static SignatureType fromValue(final String value) {
+        final SignatureType constant = CONSTANTS.get(value);
         if (constant == null) {
             throw new IllegalArgumentException("Unexpected value '" + value + "'");
         }
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/Attachment.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/Attachment.java
index a61c03e9f..6cd444285 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/Attachment.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/Attachment.java
@@ -3,8 +3,8 @@ package dev.fitko.fitconnect.api.domain.model.metadata.attachment;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Hash__1;
-import dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Signature__1;
+import dev.fitko.fitconnect.api.domain.model.metadata.Hash;
+import dev.fitko.fitconnect.api.domain.model.metadata.Signature;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -17,10 +17,10 @@ import java.util.UUID;
 public class Attachment {
 
     @JsonProperty("hash")
-    private Hash__1 hash;
+    private Hash hash;
 
     @JsonProperty("signature")
-    private Signature__1 signature;
+    private Signature signature;
 
     @JsonProperty("purpose")
     private Purpose purpose;
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/AttachmentSignatureType.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/AttachmentSignatureType.java
deleted file mode 100644
index 003d0356d..000000000
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/AttachmentSignatureType.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonValue;
-
-import java.util.Arrays;
-
-public enum AttachmentSignatureType {
-
-    SHA_512("sha512");
-    private final String value;
-
-    AttachmentSignatureType(final String value) {
-        this.value = value;
-    }
-
-    @Override
-    public String toString() {
-        return this.value;
-    }
-
-    @JsonValue
-    public String value() {
-        return this.value;
-    }
-
-    @JsonCreator
-    public static AttachmentSignatureType fromValue(final String value) {
-        return Arrays.stream(AttachmentSignatureType.values())
-                .filter(enumValue -> enumValue.value.equals(value))
-                .findFirst()
-                .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'"));
-    }
-
-}
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/Hash__1.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/Hash__1.java
deleted file mode 100644
index c707767c1..000000000
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/Hash__1.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.Map;
-
-@Data
-@NoArgsConstructor
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class Hash__1 {
-
-    @JsonProperty("type")
-    private AttachmentSignatureType attachmentSignatureType;
-
-    @JsonProperty("content")
-    private String content;
-
-    @JsonIgnore
-    private Map<String, Object> additionalProperties;
-}
-
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/Signature__1.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/Signature__1.java
deleted file mode 100644
index 5d7068edb..000000000
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/attachment/signature/Signature__1.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import dev.fitko.fitconnect.api.domain.model.metadata.EidasAdesProfile;
-import dev.fitko.fitconnect.api.domain.model.metadata.SignatureFormat;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.Map;
-
-@Data
-@NoArgsConstructor
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class Signature__1 {
-
-    @JsonProperty("signatureFormat")
-    private SignatureFormat signatureFormat;
-
-    @JsonProperty("eidasAdesProfile")
-    private EidasAdesProfile eidasAdesProfile;
-
-    @JsonProperty("detachedSignature")
-    private Boolean detachedSignature;
-
-    @JsonProperty("content")
-    private String content;
-
-    @JsonIgnore
-    private Map<String, Object> additionalProperties;
-}
-
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Data.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Data.java
index e685033a4..46013d5d2 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Data.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/metadata/data/Data.java
@@ -3,6 +3,8 @@ package dev.fitko.fitconnect.api.domain.model.metadata.data;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import dev.fitko.fitconnect.api.domain.model.metadata.Hash;
+import dev.fitko.fitconnect.api.domain.model.metadata.Signature;
 import lombok.NoArgsConstructor;
 
 import java.util.Map;
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/SubscriberClient.java b/client/src/main/java/dev/fitko/fitconnect/client/SubscriberClient.java
index 5f24fd917..cda9fe98e 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/SubscriberClient.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/SubscriberClient.java
@@ -2,10 +2,10 @@ package dev.fitko.fitconnect.client;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.nimbusds.jose.jwk.RSAKey;
+import dev.fitko.fitconnect.api.domain.model.metadata.Hash;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.AttachmentWithData;
-import dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Hash__1;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.Data;
 import dev.fitko.fitconnect.api.domain.model.submission.Submission;
 import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup;
@@ -225,7 +225,7 @@ public final class SubscriberClient {
         private ValidationResult validateAttachments(final List<AttachmentWithData> unencryptedAttachments) {
             for (final AttachmentWithData attachmentData : unencryptedAttachments) {
                 final Attachment attachmentMetadata = attachmentData.getAttachmentMetadata();
-                final Hash__1 hash = attachmentMetadata.getHash();
+                final Hash hash = attachmentMetadata.getHash();
                 final ValidationResult result = subscriber.validateHashIntegrity(hash.getContent(), attachmentData.getDecryptedData());
                 if (result.hasError()) {
                     LOGGER.error("Attachment data for id {} is corrupted", attachmentMetadata.getAttachmentId(), result.getError());
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/util/SubmissionUtil.java b/client/src/main/java/dev/fitko/fitconnect/client/util/SubmissionUtil.java
index 3a74a8a71..5121b57e6 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/util/SubmissionUtil.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/util/SubmissionUtil.java
@@ -1,15 +1,13 @@
 package dev.fitko.fitconnect.client.util;
 
 import dev.fitko.fitconnect.api.domain.model.metadata.ContentStructure;
+import dev.fitko.fitconnect.api.domain.model.metadata.Hash;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.metadata.PublicServiceType;
+import dev.fitko.fitconnect.api.domain.model.metadata.SignatureType;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.Purpose;
-import dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature.AttachmentSignatureType;
-import dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Hash__1;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.Data;
-import dev.fitko.fitconnect.api.domain.model.metadata.data.DataSignatureType;
-import dev.fitko.fitconnect.api.domain.model.metadata.data.Hash;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.SubmissionSchema;
 import dev.fitko.fitconnect.api.domain.model.submission.CreateSubmission;
 import dev.fitko.fitconnect.api.domain.model.submission.ServiceType;
@@ -29,6 +27,8 @@ import java.util.stream.Collectors;
 
 public final class SubmissionUtil {
 
+    private SubmissionUtil(){}
+
     public static CreateSubmission createSubmission(final UUID destinationId, final ServiceType serviceType, final List<UUID> attachmentIdsToAnnounce) {
         return CreateSubmission.builder()
                 .destinationId(destinationId)
@@ -60,7 +60,7 @@ public final class SubmissionUtil {
     public static Data buildData(final DataPayload dataPayload) {
         final var hash = new Hash();
         hash.setContent(dataPayload.getHashedData());
-        hash.setDataSignatureType(DataSignatureType.SHA_512);
+        hash.setSignatureType(SignatureType.SHA_512);
 
         final var submissionSchema = new SubmissionSchema();
         submissionSchema.setMimeType(dataPayload.getMimeType());
@@ -104,9 +104,9 @@ public final class SubmissionUtil {
         attachment.setFilename(attachmentPayload.getFile().getName());
         attachment.setMimeType(attachmentPayload.getMimeType());
 
-        final var hash = new Hash__1();
+        final var hash = new Hash();
         hash.setContent(attachmentPayload.getHashedData());
-        hash.setAttachmentSignatureType(AttachmentSignatureType.SHA_512);
+        hash.setSignatureType(SignatureType.SHA_512);
         attachment.setHash(hash);
         return attachment;
     }
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/SubscriberClientTest.java b/client/src/test/java/dev/fitko/fitconnect/client/SubscriberClientTest.java
index 206cbc35f..a06a10445 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/SubscriberClientTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/SubscriberClientTest.java
@@ -6,10 +6,9 @@ import com.nimbusds.jose.jwk.RSAKey;
 import dev.fitko.fitconnect.api.domain.model.metadata.ContentStructure;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
-import dev.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Hash__1;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.Data;
-import dev.fitko.fitconnect.api.domain.model.metadata.data.DataSignatureType;
-import dev.fitko.fitconnect.api.domain.model.metadata.data.Hash;
+import dev.fitko.fitconnect.api.domain.model.metadata.SignatureType;
+import dev.fitko.fitconnect.api.domain.model.metadata.Hash;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.SubmissionSchema;
 import dev.fitko.fitconnect.api.domain.model.submission.Submission;
@@ -233,7 +232,7 @@ class SubscriberClientTest {
 
         final Hash hash = new Hash();
         hash.setContent(cryptoService.hashBytes(dataPayload.getBytes()));
-        hash.setDataSignatureType(DataSignatureType.SHA_512);
+        hash.setSignatureType(SignatureType.SHA_512);
 
         final SubmissionSchema schema = new SubmissionSchema();
         schema.setSchemaUri(URI.create("https://dummy.schema.url"));
@@ -379,7 +378,7 @@ class SubscriberClientTest {
         final var data = new Data();
         data.setHash(dataHash);
 
-        final var attachmentHash = new Hash__1();
+        final var attachmentHash = new Hash();
         attachmentHash.setContent("");
         final var attachment = new Attachment();
         attachment.setFilename("src/test/resources/attachment.txt");
diff --git a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
index 0851c1fa0..1c5eed5c3 100644
--- a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
+++ b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
@@ -12,8 +12,8 @@ import dev.fitko.fitconnect.api.config.ApplicationConfig;
 import dev.fitko.fitconnect.api.domain.model.metadata.ContentStructure;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.Data;
-import dev.fitko.fitconnect.api.domain.model.metadata.data.DataSignatureType;
-import dev.fitko.fitconnect.api.domain.model.metadata.data.Hash;
+import dev.fitko.fitconnect.api.domain.model.metadata.SignatureType;
+import dev.fitko.fitconnect.api.domain.model.metadata.Hash;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.SubmissionSchema;
 import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
@@ -116,7 +116,7 @@ class DefaultValidationServiceTest {
 
         final var hash = new Hash();
         hash.setContent(hashService.toHexString(hashService.createHash("someBogusContent".getBytes())));
-        hash.setDataSignatureType(DataSignatureType.SHA_512);
+        hash.setSignatureType(SignatureType.SHA_512);
 
         final var data = new Data();
         data.setSubmissionSchema(submissionSchema);
@@ -176,7 +176,7 @@ class DefaultValidationServiceTest {
 
         final var hash = new Hash();
         hash.setContent("noHexString");
-        hash.setDataSignatureType(DataSignatureType.SHA_512);
+        hash.setSignatureType(SignatureType.SHA_512);
 
         final var dataWithInvalidHashFormat = new Data();
         dataWithInvalidHashFormat.setSubmissionSchema(submissionSchema);
-- 
GitLab