diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/export/ExportConfiguration.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/export/ExportConfiguration.java index 41a334bd5db56657b0ed4e29c86477cca123bd70..9e14461dc3f461b96cb9404f41c2eab2ea8c5f74 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/export/ExportConfiguration.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/export/ExportConfiguration.java @@ -29,7 +29,6 @@ import java.util.Map; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.oxm.jaxb.Jaxb2Marshaller; -import org.springframework.validation.Validator; import jakarta.xml.bind.Marshaller; import lombok.RequiredArgsConstructor; @@ -44,11 +43,6 @@ class ExportConfiguration { private final XdomeaNamespacePrefixMapper prefixMapper; - @Bean - static Validator configurationPropertiesValidator() { - return new XdomeaPropertiesValidator(); - } - @Bean Jaxb2Marshaller marshaller() { var marshaller = new Jaxb2Marshaller(); diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/export/XdomeaProperties.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/export/XdomeaProperties.java index 49832ad651a2a8cb338004baa88a77c255f444dc..3116a593eb97ceecd04f6d88e7370a4cb344ed76 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/export/XdomeaProperties.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/export/XdomeaProperties.java @@ -23,10 +23,14 @@ */ package de.ozgcloud.archive.export; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; -import org.springframework.validation.annotation.Validated; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; +import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -35,15 +39,50 @@ import lombok.Setter; @Configuration @ConfigurationProperties("ozgcloud.xdomea") -@Validated @Builder @Getter @Setter @NoArgsConstructor @AllArgsConstructor -public class XdomeaProperties { +public class XdomeaProperties implements Validator { + + private static final String PROP_BEHOERDENSCHLUESSEL_URI = "behoerdenschluesselUri"; + private static final String PROP_BEHOERDENSCHLUESSEL_VERSION = "behoerdenschluesselVersion"; private String behoerdenschluessel; private String behoerdenschluesselUri; private String behoerdenschluesselVersion; + + @Override + public boolean supports(Class<?> clazz) { + return XdomeaProperties.class.isAssignableFrom(clazz); + } + + @Override + public void validate(Object target, Errors errors) { + var properties = (XdomeaProperties) target; + validateBehoerdenschluesselProperties(errors, properties); + } + + private void validateBehoerdenschluesselProperties(Errors errors, XdomeaProperties properties) { + if (StringUtils.isNotBlank(properties.getBehoerdenschluessel())) { + validateNotBlank(PROP_BEHOERDENSCHLUESSEL_URI, properties, errors); + validateNotBlank(PROP_BEHOERDENSCHLUESSEL_VERSION, properties, errors); + } + } + + private void validateNotBlank(String propertyName, XdomeaProperties properties, Errors errors) { + getPropertyValue(propertyName, properties); + if (StringUtils.isBlank(getPropertyValue(propertyName, properties))) { + errors.rejectValue(propertyName, String.format("ozgcloud.xdomea.%s.empty", propertyName), String.format("%s must be set", propertyName)); + } + } + + private static String getPropertyValue(String fieldName, XdomeaProperties properties) { + try { + return BeanUtils.getSimpleProperty(properties, fieldName); + } catch (Exception e) { + throw new TechnicalException("Property does not exist", e); + } + } } diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/export/XdomeaPropertiesValidator.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/export/XdomeaPropertiesValidator.java deleted file mode 100644 index 4f4cda4bc50ece16162600656c3a23c1462c2b23..0000000000000000000000000000000000000000 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/export/XdomeaPropertiesValidator.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2024 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.archive.export; - -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.validation.Errors; -import org.springframework.validation.Validator; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -public class XdomeaPropertiesValidator implements Validator { - - @Override - public boolean supports(Class<?> clazz) { - return XdomeaProperties.class.isAssignableFrom(clazz); - } - - @Override - public void validate(Object target, Errors errors) { - var properties = (XdomeaProperties) target; - validateBehoerdenschluesselProperties(errors, properties); - } - - private void validateBehoerdenschluesselProperties(Errors errors, XdomeaProperties properties) { - if (StringUtils.isNotBlank(properties.getBehoerdenschluessel())) { - validateNotBlank("behoerdenschluesselUri", properties, errors); - validateNotBlank("behoerdenschluesselVersion", properties, errors); - } - } - - private void validateNotBlank(String propertyName, XdomeaProperties properties, Errors errors) { - getPropertyValue(propertyName, properties); - if (StringUtils.isBlank(getPropertyValue(propertyName, properties))) { - errors.rejectValue(propertyName, String.format("ozgcloud.xdomea.%s.empty", propertyName), String.format("%s must be set", propertyName)); - } - } - - private static String getPropertyValue(String fieldName, XdomeaProperties properties) { - try { - return BeanUtils.getSimpleProperty(properties, fieldName); - } catch (Exception e) { - throw new TechnicalException("Property does not exist", e); - } - } -} diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesValidatorTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesTest.java similarity index 95% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesValidatorTest.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesTest.java index e5c9b728a196f3c6331de4f6f4e9a3e5d4c4e261..c0e945edf701ab54b3a45aa923e37f1d639acc3b 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesValidatorTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesTest.java @@ -29,20 +29,16 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.Spy; import org.springframework.validation.Errors; -class XdomeaPropertiesValidatorTest { - - @Spy - private XdomeaPropertiesValidator validator; +class XdomeaPropertiesTest { @Nested class TestSupports { @Test void shouldSupportXdomeaProperties() { - var supports = validator.supports(XdomeaProperties.class); + var supports = XdomeaPropertiesTestFactory.create().supports(XdomeaProperties.class); assertThat(supports).isTrue(); } @@ -155,7 +151,7 @@ class XdomeaPropertiesValidatorTest { } private Errors validate(XdomeaProperties properties) { - return validator.validateObject(properties); + return properties.validateObject(properties); } } } diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesValidatorITCase.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesValidatorITCase.java deleted file mode 100644 index 0ef292ea8ef35c2994f24c103d696403290b4de2..0000000000000000000000000000000000000000 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/export/XdomeaPropertiesValidatorITCase.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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.archive.export; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; -import org.springframework.context.ApplicationContext; - -import de.ozgcloud.common.test.ITCase; - -@ITCase -class XdomeaPropertiesValidatorITCase { - - @Test - void shouldExistInApplicationContext(ApplicationContext context) { - assertThat(context.getBean("configurationPropertiesValidator")).isNotNull().isInstanceOf(XdomeaPropertiesValidator.class); - } -}