From 99a93586796acc28b97a664ed7a9e97a3620234e Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Mon, 29 Jul 2024 15:40:58 +0200 Subject: [PATCH] introduce EntityManager to HostingAssetEntitySaveProcessor --- .../hs/hosting/asset/HsHostingAssetController.java | 6 +++--- .../validators/HostingAssetEntitySaveProcessor.java | 9 ++++++--- .../hsadminng/hs/validation/HsEntityValidator.java | 9 +++++---- .../hsadminng/hs/validation/ValidatableProperty.java | 3 ++- .../HsMariaDbUserHostingAssetValidatorUnitTest.java | 5 ++++- .../HsPostgreSqlUserHostingAssetValidatorUnitTest.java | 5 ++++- .../HsUnixUserHostingAssetValidatorUnitTest.java | 7 +++++-- .../hsadminng/hs/migration/ImportHostingAssets.java | 4 ++-- .../hs/validation/PasswordPropertyUnitTest.java | 4 +++- 9 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetController.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetController.java index 3ca7efff..66402aac 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetController.java @@ -72,7 +72,7 @@ public class HsHostingAssetController implements HsHostingAssetsApi { final var entity = mapper.map(body, HsHostingAssetEntity.class, RESOURCE_TO_ENTITY_POSTMAPPER); - final var mapped = new HostingAssetEntitySaveProcessor(entity) + final var mapped = new HostingAssetEntitySaveProcessor(em, entity) .preprocessEntity() .validateEntity() .prepareForSave() @@ -133,7 +133,7 @@ public class HsHostingAssetController implements HsHostingAssetsApi { new HsHostingAssetEntityPatcher(em, entity).apply(body); - final var mapped = new HostingAssetEntitySaveProcessor(entity) + final var mapped = new HostingAssetEntitySaveProcessor(em, entity) .preprocessEntity() .validateEntity() .prepareForSave() @@ -162,5 +162,5 @@ public class HsHostingAssetController implements HsHostingAssetsApi { @SuppressWarnings("unchecked") final BiConsumer ENTITY_TO_RESOURCE_POSTMAPPER = (entity, resource) -> resource.setConfig(HostingAssetEntityValidatorRegistry.forType(entity.getType()) - .revampProperties(entity, (Map) resource.getConfig())); + .revampProperties(em, entity, (Map) resource.getConfig())); } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HostingAssetEntitySaveProcessor.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HostingAssetEntitySaveProcessor.java index 189b3314..495ea665 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HostingAssetEntitySaveProcessor.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HostingAssetEntitySaveProcessor.java @@ -5,6 +5,7 @@ import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity; import net.hostsharing.hsadminng.hs.hosting.generated.api.v1.model.HsHostingAssetResource; import net.hostsharing.hsadminng.hs.validation.HsEntityValidator; +import jakarta.persistence.EntityManager; import java.util.Map; import java.util.function.Function; @@ -15,10 +16,12 @@ public class HostingAssetEntitySaveProcessor { private final HsEntityValidator validator; private String expectedStep = "preprocessEntity"; + private final EntityManager em; private HsHostingAssetEntity entity; private HsHostingAssetResource resource; - public HostingAssetEntitySaveProcessor(final HsHostingAssetEntity entity) { + public HostingAssetEntitySaveProcessor(final EntityManager em, final HsHostingAssetEntity entity) { + this.em = em; this.entity = entity; this.validator = HostingAssetEntityValidatorRegistry.forType(entity.getType()); } @@ -41,7 +44,7 @@ public class HostingAssetEntitySaveProcessor { @SuppressWarnings("unchecked") public HostingAssetEntitySaveProcessor prepareForSave() { step("prepareForSave", "saveUsing"); - validator.prepareProperties(entity); + validator.prepareProperties(em, entity); return this; } @@ -70,7 +73,7 @@ public class HostingAssetEntitySaveProcessor { @SuppressWarnings("unchecked") public HsHostingAssetResource revampProperties() { step("revampProperties", null); - final var revampedProps = validator.revampProperties(entity, (Map) resource.getConfig()); + final var revampedProps = validator.revampProperties(em, entity, (Map) resource.getConfig()); resource.setConfig(revampedProps); return resource; } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/validation/HsEntityValidator.java b/src/main/java/net/hostsharing/hsadminng/hs/validation/HsEntityValidator.java index fac624cf..f6d72789 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/validation/HsEntityValidator.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/validation/HsEntityValidator.java @@ -2,6 +2,7 @@ package net.hostsharing.hsadminng.hs.validation; +import jakarta.persistence.EntityManager; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -106,21 +107,21 @@ public abstract class HsEntityValidator { throw new IllegalArgumentException("Integer value (or null) expected, but got " + value); } - public void prepareProperties(final E entity) { + public void prepareProperties(final EntityManager em, final E entity) { stream(propertyValidators).forEach(p -> { if ( p.isWriteOnly() && p.isComputed()) { - entity.directProps().put(p.propertyName, p.compute(entity)); + entity.directProps().put(p.propertyName, p.compute(em, entity)); } }); } - public Map revampProperties(final E entity, final Map config) { + public Map revampProperties(final EntityManager em, final E entity, final Map config) { final var copy = new HashMap<>(config); stream(propertyValidators).forEach(p -> { if (p.isWriteOnly()) { copy.remove(p.propertyName); } else if (p.isReadOnly() && p.isComputed()) { - copy.put(p.propertyName, p.compute(entity)); + copy.put(p.propertyName, p.compute(em, entity)); } }); return copy; diff --git a/src/main/java/net/hostsharing/hsadminng/hs/validation/ValidatableProperty.java b/src/main/java/net/hostsharing/hsadminng/hs/validation/ValidatableProperty.java index d98ff34c..d5678e12 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/validation/ValidatableProperty.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/validation/ValidatableProperty.java @@ -9,6 +9,7 @@ import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemEntity; import net.hostsharing.hsadminng.mapper.Array; import org.apache.commons.lang3.function.TriFunction; +import jakarta.persistence.EntityManager; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -307,7 +308,7 @@ protected void setDeferredInit(final Function[], T[]> return self(); } - public T compute(final E entity) { + public T compute(final EntityManager em, final E entity) { return computedBy.apply(entity); } diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsMariaDbUserHostingAssetValidatorUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsMariaDbUserHostingAssetValidatorUnitTest.java index d5f4948e..259d980e 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsMariaDbUserHostingAssetValidatorUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsMariaDbUserHostingAssetValidatorUnitTest.java @@ -4,6 +4,7 @@ import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity; import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity.HsHostingAssetEntityBuilder; import org.junit.jupiter.api.Test; +import jakarta.persistence.EntityManager; import java.util.HashMap; import java.util.stream.Stream; @@ -24,6 +25,8 @@ class HsMariaDbUserHostingAssetValidatorUnitTest { .caption("some valid test MariaDB-Instance") .build(); + private EntityManager em = null; // not actually needed in these test cases + private static HsHostingAssetEntityBuilder givenValidMariaDbUserBuilder() { return HsHostingAssetEntity.builder() .type(MARIADB_USER) @@ -58,7 +61,7 @@ class HsMariaDbUserHostingAssetValidatorUnitTest { // when // HashGenerator.nextSalt("Ly3LbsArtL5u4EVt"); // not needed for mysql_native_password - validator.prepareProperties(givenMariaDbUserHostingAsset); + validator.prepareProperties(em, givenMariaDbUserHostingAsset); // then assertThat(givenMariaDbUserHostingAsset.getConfig()).containsExactlyInAnyOrderEntriesOf(ofEntries( diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsPostgreSqlUserHostingAssetValidatorUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsPostgreSqlUserHostingAssetValidatorUnitTest.java index 0875ea7b..4b48dc5e 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsPostgreSqlUserHostingAssetValidatorUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsPostgreSqlUserHostingAssetValidatorUnitTest.java @@ -5,6 +5,7 @@ import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity; import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity.HsHostingAssetEntityBuilder; import org.junit.jupiter.api.Test; +import jakarta.persistence.EntityManager; import java.nio.charset.Charset; import java.util.Base64; import java.util.HashMap; @@ -27,6 +28,8 @@ class HsPostgreSqlUserHostingAssetValidatorUnitTest { .caption("some valid test PgSql-Instance") .build(); + private EntityManager em = null; // not actually needed in these test cases + private static HsHostingAssetEntityBuilder givenValidMariaDbUserBuilder() { return HsHostingAssetEntity.builder() .type(PGSQL_USER) @@ -61,7 +64,7 @@ class HsPostgreSqlUserHostingAssetValidatorUnitTest { // when HashGenerator.nextSalt(new String(Base64.getDecoder().decode("L1QxSVNyTU81b3NZS1djNg=="), Charset.forName("latin1"))); - validator.prepareProperties(givenMariaDbUserHostingAsset); + validator.prepareProperties(em, givenMariaDbUserHostingAsset); // then assertThat(givenMariaDbUserHostingAsset.getConfig()).containsExactlyInAnyOrderEntriesOf(ofEntries( diff --git a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsUnixUserHostingAssetValidatorUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsUnixUserHostingAssetValidatorUnitTest.java index 0d128cab..7a27db88 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsUnixUserHostingAssetValidatorUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/hosting/asset/validators/HsUnixUserHostingAssetValidatorUnitTest.java @@ -5,6 +5,7 @@ import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetEntity; import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType; import org.junit.jupiter.api.Test; +import jakarta.persistence.EntityManager; import java.util.HashMap; import java.util.stream.Stream; @@ -43,6 +44,8 @@ class HsUnixUserHostingAssetValidatorUnitTest { ))) .build(); + private EntityManager em = null; // not actually needed in these test cases + @Test void preparesUnixUser() { // given @@ -51,7 +54,7 @@ class HsUnixUserHostingAssetValidatorUnitTest { // when HashGenerator.nextSalt("Ly3LbsArtL5u4EVt"); - validator.prepareProperties(unixUserHostingAsset); + validator.prepareProperties(em, unixUserHostingAsset); // then assertThat(unixUserHostingAsset.getConfig()).containsExactlyInAnyOrderEntriesOf(ofEntries( @@ -142,7 +145,7 @@ class HsUnixUserHostingAssetValidatorUnitTest { // when HashGenerator.nextSalt("Ly3LbsArtL5u4EVt"); - final var result = validator.revampProperties(unixUserHostingAsset, unixUserHostingAsset.getConfig()); + final var result = validator.revampProperties(em, unixUserHostingAsset, unixUserHostingAsset.getConfig()); // then assertThat(result).containsExactlyInAnyOrderEntriesOf(ofEntries( diff --git a/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java b/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java index 23e6829d..b9cfac9f 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java @@ -352,7 +352,7 @@ public class ImportHostingAssets extends ImportOfficeData { void validateHostingAssets() { hostingAssets.forEach((id, ha) -> { try { - new HostingAssetEntitySaveProcessor(ha) + new HostingAssetEntitySaveProcessor(em, ha) .preprocessEntity() .validateEntity(); } catch (final Exception exc) { @@ -408,7 +408,7 @@ public class ImportHostingAssets extends ImportOfficeData { context(rbacSuperuser); hostingAssets.forEach((key, ha) -> { if (ha.getType() == hsHostingAssetType) { - new HostingAssetEntitySaveProcessor(ha) + new HostingAssetEntitySaveProcessor(em, ha) .preprocessEntity() .validateEntity() .prepareForSave() diff --git a/src/test/java/net/hostsharing/hsadminng/hs/validation/PasswordPropertyUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/validation/PasswordPropertyUnitTest.java index 663a7715..47e40336 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/validation/PasswordPropertyUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/validation/PasswordPropertyUnitTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import jakarta.persistence.EntityManager; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -19,6 +20,7 @@ class PasswordPropertyUnitTest { private final ValidatableProperty passwordProp = passwordProperty("password").minLength(8).maxLength(40).hashedUsing(LINUX_SHA512).writeOnly(); private final List violations = new ArrayList<>(); + private EntityManager em = null; // not actually needed in these test cases @ParameterizedTest @ValueSource(strings = { @@ -99,7 +101,7 @@ class PasswordPropertyUnitTest { void shouldComputeHash() { // when - final var result = passwordProp.compute(new PropertiesProvider() { + final var result = passwordProp.compute(em, new PropertiesProvider() { @Override public Map directProps() {