diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java index 88f929500547e5791e33ff45fa4d4ba383b0a044..703c1e5fabfaed6905cd4e068eba196210e44d27 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java @@ -35,7 +35,6 @@ import org.springframework.hateoas.server.RepresentationModelAssembler; import org.springframework.stereotype.Component; import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController; -import de.ozgcloud.alfa.common.CollectionModelBuilder; import de.ozgcloud.alfa.common.command.CommandController; import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; @@ -62,11 +61,9 @@ class CollaborationModelAssembler implements RepresentationModelAssembler<Collab var selfLink = linkTo(methodOn(CollaborationByVorgangController.class).getAllByVorgangId(vorgangId)).withSelfRel(); - return CollectionModelBuilder.fromEntities(entityModels) - .addLink(selfLink) - .ifMatch(() -> entityModels.isEmpty() && vorgangController.isEditable(vorgang)) - .addLink(() -> buildCreateCollaborationRequestLink(vorgang)) - .buildModel(); + return CollectionModel.of(entityModels) + .add(selfLink) + .addIf(entityModels.isEmpty() && vorgangController.isEditable(vorgang), () -> buildCreateCollaborationRequestLink(vorgang)); } Link buildCreateCollaborationRequestLink(VorgangWithEingang vorgang) { diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java deleted file mode 100644 index 01ceb2d404037d97e024e9ff33baa69b6cc88607..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.alfa.common; - -import java.util.LinkedList; -import java.util.List; -import java.util.function.BooleanSupplier; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.Stream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.Link; - -import lombok.RequiredArgsConstructor; - -public class CollectionModelBuilder<T> { - - private final Iterable<T> entities; - - private final List<Link> links = new LinkedList<>(); - - private CollectionModelBuilder(Iterable<T> entities) { - this.entities = entities; - } - - public static <T> CollectionModelBuilder<T> fromEntities(Iterable<T> entities) { - return new CollectionModelBuilder<>(entities); - } - - public static <T> CollectionModelBuilder<T> fromEntities(Stream<T> entities) { - return new CollectionModelBuilder<>(entities.toList()); - } - - public CollectionModelBuilder<T> addLink(Link link) { - links.add(link); - return this; - } - - public ConditionalLinkAdder ifMatch(BooleanSupplier guard) { - return new ConditionalLinkAdder(guard.getAsBoolean()); - } - - public ConditionalLinkAdder ifMatch(Predicate<? super Iterable<T>> predicate) { - return new ConditionalLinkAdder(predicate.test(entities)); - } - - public CollectionModel<T> buildModel() { - var builtModel = CollectionModel.of(entities); - builtModel.add(links); - return builtModel; - } - - @RequiredArgsConstructor - public class ConditionalLinkAdder { - - public final boolean conditionFulfilled; - - public CollectionModelBuilder<T> addLink(Link link) { - if (conditionFulfilled) { - links.add(link); - } - return CollectionModelBuilder.this; - } - - public CollectionModelBuilder<T> addLink(Supplier<Link> linkSupplier) { - if (conditionFulfilled) { - links.add(linkSupplier.get()); - } - return CollectionModelBuilder.this; - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java index 3ed9abdfc3c5b232fe96bab5aa1f106efb3c92b6..ba9d6df0ae625464e05c3dd9c4fff57905723df0 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java @@ -33,7 +33,6 @@ import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.server.RepresentationModelAssembler; import org.springframework.stereotype.Component; -import de.ozgcloud.alfa.common.CollectionModelBuilder; import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController; import de.ozgcloud.alfa.vorgang.VorgangController; @@ -72,12 +71,11 @@ class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar, public CollectionModel<EntityModel<Kommentar>> toCollectionModel(Stream<Kommentar> entities, String vorgangId) { var vorgang = vorgangController.getVorgang(vorgangId); - return CollectionModelBuilder.fromEntities(entities.map(kommentar -> buildModel(kommentar, vorgang))) - .addLink(linkTo(KommentarController.class).withSelfRel()) - .addLink(linkTo(BinaryFileController.class).slash(vorgangId).slash("kommentarAttachment").slash("file").withRel(REL_UPLOAD_FILE)) - .ifMatch(() -> vorgangController.isEditable(vorgang)) - .addLink(linkTo(methodOn(KommentarCommandByVorgangController.class).createKommentar(null, vorgangId)) - .withRel(REL_CREATE)) - .buildModel(); + return CollectionModel.of(entities.map(kommentar -> buildModel(kommentar, vorgang)).toList()) + .add(linkTo(KommentarController.class).withSelfRel()) + .add(linkTo(BinaryFileController.class).slash(vorgangId).slash("kommentarAttachment").slash("file").withRel(REL_UPLOAD_FILE)) + .addIf(vorgangController.isEditable(vorgang), + () -> linkTo(methodOn(KommentarCommandByVorgangController.class).createKommentar(null, vorgangId)) + .withRel(REL_CREATE)); } } \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java deleted file mode 100644 index 53e3d279b9ee0174a865852293ec9eb5a7daf849..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.function.Supplier; -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory; - -class CollectionModelBuilderTest { - - private final String HREF = "http://test"; - private final String REL = "rel"; - - @Nested - class TestBuildModel { - - @Test - void shouldBuildModel() { - var vorgang = VorgangHeaderTestFactory.create(); - - var model = CollectionModelBuilder.fromEntities(List.of(vorgang)).buildModel(); - - assertThat(model.getContent()).hasSize(1).first().usingRecursiveComparison().isEqualTo(vorgang); - } - } - - @Nested - class TestAddLink { - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - } - - @Nested - class TestIfMatch { - - @Nested - class TestWithBooleanSupplier { - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> true).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - - @Test - void shouldNotAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).isEmpty(); - } - } - - @Nested - class TestWithPredicate { - - private final Stream<Wiedervorlage> wiedervorlageStream = Stream.of(WiedervorlageTestFactory.create()); - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(wiedervorlageStream) - .ifMatch(wiedervorlagen -> true) - .addLink(Link.of(HREF, REL)) - .buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - - @Test - void shouldNotAddLink() { - var model = CollectionModelBuilder.fromEntities(wiedervorlageStream) - .ifMatch(wiedervorlagen -> false) - .addLink(Link.of(HREF, REL)) - .buildModel(); - - assertThat(model.getLinks()).isEmpty(); - } - } - - @Nested - class TestWithLinkSupplier { - - @Mock - private Supplier<Link> linkSupplier; - - @Test - void shouldAddLink() { - when(linkSupplier.get()).thenReturn(Link.of(HREF, REL)); - - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> true).addLink(linkSupplier).buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - - @Test - void shouldNotCallLinkSupplier() { - CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(linkSupplier).buildModel(); - - verify(linkSupplier, never()).get(); - } - - @Test - void shouldNotAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(linkSupplier).buildModel(); - - assertThat(model.getLinks()).isEmpty(); - } - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java index f9426632645c3e5fa764a52dbae6e97c9abeecad..db7c591bad74ecd8aa794161c3c4c38ba89ba561 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java @@ -42,7 +42,6 @@ import org.springframework.hateoas.Link; import org.springframework.hateoas.server.EntityLinks; import de.ozgcloud.alfa.common.LinkedResourceTestUtils; -import de.ozgcloud.alfa.common.UserProfileUrlProvider; import de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory; import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; import de.ozgcloud.alfa.vorgang.VorgangController; @@ -164,7 +163,6 @@ class KommentarModelAssemblerTest { @Nested class TestLinksOnCollectionModel { - private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); @BeforeEach