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 5d60cfbd4c5550d249fb6701571e058249dffa38..5afe5cf937829278c87d48deccddef99841da044 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 @@ -2,4 +2,7 @@ package de.ozgcloud.nachrichten.postfach; public interface PostfachAddressIdentifier { + default boolean isStringBasedIdentifier() { + return false; + } } 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 3eb6f3919cb8d1c5456bc0d232b1c2d30c02d3ab..0d6397bf4323f5195060a06b219b984bb3019144 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 @@ -7,10 +7,12 @@ import org.springframework.stereotype.Service; import de.ozgcloud.nachrichten.NachrichtenManagerProperties; import de.ozgcloud.nachrichten.antragraum.AntragraumProperties; +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; @@ -40,14 +42,18 @@ public class InfoManagerService { return InfoManagerRequest.builder() .nachrichtId(postfachNachricht.getId()) .vorgangId(postfachNachricht.getVorgangId()) - .postfachId(getPostfachId(postfachNachricht)) + .postfachId(getPostfachId(postfachNachricht.getPostfachAddress())) .nachrichtenManagerUrl(nachrichtenManagerProperties.getAddress()) .build(); } - String getPostfachId(PostfachNachricht nachricht) { - // FIXME - wie gehen wir mit anderen Typen um? - var identifier = (StringBasedIdentifier) nachricht.getPostfachAddress().getIdentifier(); - return identifier.getPostfachId(); + String getPostfachId(@NonNull PostfachAddress address) { + var postfachIdentifier = address.getIdentifier(); + + if (postfachIdentifier.isStringBasedIdentifier()) { + return ((StringBasedIdentifier) postfachIdentifier).getPostfachId(); + } 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/StringBasedIdentifier.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java index da37d0e5d7c1c788f3a9ab2a4af4b1f0215d2a51..841dfd17adb9931bb68a87a3f0855bc20057429b 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java @@ -8,4 +8,9 @@ import lombok.Getter; public class StringBasedIdentifier implements PostfachAddressIdentifier { private String postfachId; + + @Override + public boolean isStringBasedIdentifier() { + return true; + } } 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 d7d149a4ca821b59cfa2db7566b1e6077b6d8511..ca6c910141e2ebbba0e3dee44fc398417411e56c 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 @@ -12,6 +12,8 @@ import org.mockito.Mock; import org.mockito.Spy; import de.ozgcloud.nachrichten.NachrichtenManagerProperties; +import de.ozgcloud.nachrichten.postfach.PostfachAddressIdentifier; +import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory; import de.ozgcloud.nachrichten.postfach.PostfachException; import de.ozgcloud.nachrichten.postfach.PostfachMessageCode; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; @@ -99,6 +101,26 @@ class InfoManagerServiceTest { return service.builInfomanagerRequest(postfachNachricht); } } + } + + @Nested + class TestGetPostfachId { + @Test + void shouldReturnId() { + var address = PostfachAddressTestFactory.create(); + + var id = service.getPostfachId(address); + assertThat(id).isEqualTo(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + } + + @Test + void shouldThrowExceptionForUnkownIdentifer() { + var identifier = new PostfachAddressIdentifier() { + }; + var address = PostfachAddressTestFactory.createBuilder().identifier(identifier).build(); + + assertThatThrownBy(() -> service.getPostfachId(address)).isInstanceOf(IllegalStateException.class); + } } }