From 9a426af3bcc02f9ded51840b33a38d5bf5d6eee9 Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Fri, 14 Feb 2025 11:39:18 +0100
Subject: [PATCH] OZG-4094 add interface method to PostfachAddressIdentifier
 and move StringBasedIdentifier to interface module

---
 .../nachrichten/postfach/PostfachAddressIdentifier.java    | 2 ++
 .../nachrichten/postfach/StringBasedIdentifier.java        | 7 +++++--
 .../de/ozgcloud/nachrichten/info/InfoManagerService.java   | 3 +--
 .../nachrichten/postfach/PostfachNachrichtMapper.java      | 3 +--
 .../postfach/bayernid/BayernIdPostfachNachrichtMapper.java | 3 +--
 .../nachrichten/postfach/osi/OsiPostfachMessageMapper.java | 5 ++---
 .../ozgcloud/nachrichten/info/InfoManagerServiceTest.java  | 7 +++++++
 7 files changed, 19 insertions(+), 11 deletions(-)
 rename {nachrichten-manager-server => nachrichten-manager-postfach-interface}/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java (94%)

diff --git a/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java b/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java
index 824cb12..2ead26b 100644
--- a/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java
+++ b/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java
@@ -28,4 +28,6 @@ public interface PostfachAddressIdentifier {
 	default boolean isStringBasedIdentifier() {
 		return false;
 	}
+
+	String getStringRepresentation();
 }
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java b/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java
similarity index 94%
rename from nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java
rename to nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java
index 5724f86..5940c9f 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java
+++ b/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java
@@ -26,10 +26,8 @@ package de.ozgcloud.nachrichten.postfach;
 import jakarta.validation.constraints.NotBlank;
 
 import lombok.Builder;
-import lombok.Getter;
 
 @Builder
-@Getter
 public class StringBasedIdentifier implements PostfachAddressIdentifier {
 
 	@NotBlank
@@ -44,4 +42,9 @@ public class StringBasedIdentifier implements PostfachAddressIdentifier {
 	public String toString() {
 		return postfachId;
 	}
+
+	@Override
+	public String getStringRepresentation() {
+		return postfachId;
+	}
 }
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java
index ed617fa..3519085 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java
@@ -34,7 +34,6 @@ import de.ozgcloud.nachrichten.postfach.PostfachAddress;
 import de.ozgcloud.nachrichten.postfach.PostfachException;
 import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
@@ -74,7 +73,7 @@ public class InfoManagerService {
 		var postfachIdentifier = address.getIdentifier();
 
 		if (postfachIdentifier.isStringBasedIdentifier()) {
-			return ((StringBasedIdentifier) postfachIdentifier).getPostfachId();
+			return postfachIdentifier.getStringRepresentation();
 		} else {
 			throw new IllegalStateException("Illegal Type of Postfach Identifier: " + postfachIdentifier.getClass().getName());
 		}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
index c521e7d..5a3a0fb 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
@@ -239,7 +239,6 @@ public abstract class PostfachNachrichtMapper {
 	}
 
 	private Map<String, Object> buildPostfachAddressIdentifierMap(PostfachAddress postfachAddress) {
-		var identifier = (StringBasedIdentifier) postfachAddress.getIdentifier();
-		return Map.of(PostfachAddress.FIELD_POSTFACH_ID, identifier.getPostfachId());
+		return Map.of(PostfachAddress.FIELD_POSTFACH_ID, postfachAddress.getIdentifier().getStringRepresentation());
 	}
 }
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java
index 9c33343..8787cb6 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java
@@ -38,7 +38,6 @@ import org.mapstruct.ReportingPolicy;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.nachrichten.postfach.PostfachAddress;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier;
 import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAbsender;
 import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata;
 import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata;
@@ -85,7 +84,7 @@ interface BayernIdPostfachNachrichtMapper {
 	BayernIdResponse fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponse response);
 
 	default String toPostkorbId(PostfachAddress postfachAddress) {
-		return ((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId();
+		return (postfachAddress.getIdentifier()).getStringRepresentation();
 	}
 
 	@Condition
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
index 0a2838e..75ec7ea 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
@@ -35,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import de.ozgcloud.nachrichten.postfach.FileId;
 import de.ozgcloud.nachrichten.postfach.PostfachAddress;
+import de.ozgcloud.nachrichten.postfach.PostfachAddressIdentifier;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier;
 
@@ -78,9 +79,7 @@ public abstract class OsiPostfachMessageMapper {
 	String toPostfachId(PostfachNachricht nachricht) {
 		return Optional.ofNullable(nachricht.getPostfachAddress())
 				.map(PostfachAddress::getIdentifier)
-				.filter(StringBasedIdentifier.class::isInstance)
-				.map(StringBasedIdentifier.class::cast)
-				.map(StringBasedIdentifier::getPostfachId)
+				.map(PostfachAddressIdentifier::getStringRepresentation)
 				.orElse(StringUtils.EMPTY);
 	}
 
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java
index 55f8368..ccf343a 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java
@@ -28,6 +28,7 @@ import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
@@ -141,7 +142,13 @@ class InfoManagerServiceTest {
 		@Test
 		void shouldThrowExceptionForUnkownIdentifer() {
 			var identifier = new PostfachAddressIdentifier() {
+
+				@Override
+				public String getStringRepresentation() {
+					return StringUtils.EMPTY;
+				}
 			};
+
 			var address = PostfachAddressTestFactory.createBuilder().identifier(identifier).build();
 
 			assertThatThrownBy(() -> service.getPostfachId(address)).isInstanceOf(IllegalStateException.class);
-- 
GitLab