From 1462b9944d6ca222dda828410f1a30902c252570 Mon Sep 17 00:00:00 2001 From: Thomas Georgios Giannos Date: Tue, 2 Jan 2024 11:50:32 +0200 Subject: [PATCH] Implementing validators for Description template related persist models (completed) --- .../commons/validation/BaseValidator.java | 6 +- .../model/persist/DescriptionPersist.java | 2 +- .../persist/DescriptionTemplatePersist.java | 4 +- .../DescriptionTemplateTypePersist.java | 20 +---- .../eudat/model/persist/ReferencePersist.java | 8 +- .../eu/eudat/model/persist/TagPersist.java | 2 +- .../UserDescriptionTemplatePersist.java | 83 ++++++++++++++----- .../FieldPersist.java | 82 +++++++++++++++++- .../fielddata/CurrencyDataPersist.java | 33 +++++++- .../fielddata/DataRepositoryDataPersist.java | 43 +++++++++- .../DatasetIdentifierDataPersist.java | 32 ++++++- .../JournalRepositoryDataPersist.java | 43 +++++++++- .../PublicationRepositoryDataPersist.java | 42 +++++++++- .../fielddata/RadioBoxDataPersist.java | 6 +- .../fielddata/RegistryDataPersist.java | 41 ++++++++- .../ResearcherAutoCompleteDataPersist.java | 43 +++++++++- .../fielddata/ResearcherDataPersist.java | 41 ++++++++- .../fielddata/RichTextAreaDataPersist.java | 32 ++++++- .../fielddata/ServiceDataPersist.java | 42 +++++++++- .../fielddata/TagDataPersist.java | 31 +++++++ .../fielddata/TaxonomyDataPersist.java | 41 ++++++++- .../fielddata/TextAreaDataPersist.java | 31 +++++++ .../fielddata/UploadDataPersist.java | 61 ++++++++++++-- .../fielddata/UploadOptionPersist.java | 82 +++++++++++++----- .../fielddata/ValidationDataPersist.java | 33 +++++++- .../fielddata/WordListDataPersist.java | 61 ++++++++++++-- 26 files changed, 842 insertions(+), 103 deletions(-) diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/validation/BaseValidator.java b/dmp-backend/core/src/main/java/eu/eudat/commons/validation/BaseValidator.java index 3ae8839fa..c1cbab41b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/commons/validation/BaseValidator.java +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/validation/BaseValidator.java @@ -43,8 +43,12 @@ public abstract class BaseValidator extends AbstractValidator { return value == null; } - protected Boolean lessEqual(String value, int size) { + protected Boolean lessEqualLength(String value, int size) { return value.length() <= size; } + + protected Boolean lessEqual(Integer value, int target) { + return value <= target; + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionPersist.java index eaab7cb1f..ded502cdf 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionPersist.java @@ -188,7 +188,7 @@ public class DescriptionPersist { .failOn(DescriptionPersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._label}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> !this.isEmpty(item.getLabel())) - .must(() -> this.lessEqual(item.getLabel(), DescriptionPersist._labelLength)) + .must(() -> this.lessEqualLength(item.getLabel(), DescriptionPersist._labelLength)) .failOn(DescriptionPersist._label).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{DescriptionPersist._label}, LocaleContextHolder.getLocale())), this.spec() .must(() -> this.isValidGuid(item.getDmpId())) diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionTemplatePersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionTemplatePersist.java index 2d159f9d1..286074b1e 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionTemplatePersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionTemplatePersist.java @@ -169,7 +169,7 @@ public class DescriptionTemplatePersist { .failOn(DescriptionTemplatePersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionTemplatePersist._label}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> !this.isEmpty(item.getLabel())) - .must(() -> this.lessEqual(item.getLabel(), DescriptionTemplatePersist._labelLength)) + .must(() -> this.lessEqualLength(item.getLabel(), DescriptionTemplatePersist._labelLength)) .failOn(DescriptionTemplatePersist._label).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{DescriptionTemplatePersist._label}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isEmpty(item.getDescription())) @@ -199,7 +199,7 @@ public class DescriptionTemplatePersist { .iff(() -> !this.isNull(item.getUsers())) .on(DescriptionTemplatePersist._users) .over(item.getUsers()) - .using(() -> null) //TODO (thgiannos) + .using(() -> this.validatorFactory.validator(UserDescriptionTemplatePersist.UserDescriptionTemplatePersistValidator.class)) ); } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionTemplateTypePersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionTemplateTypePersist.java index b3b960ec7..c51fa2c43 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionTemplateTypePersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionTemplateTypePersist.java @@ -32,14 +32,6 @@ public class DescriptionTemplateTypePersist { public final static String _hash = "hash"; private DescriptionTemplateTypeStatus status; - -// private List nested; -// -// public final static String _nested = "nested"; -// -// private DescriptionTemplateTypePersist obj; -// -// public final static String _obj = "obj"; public UUID getId() { return id; @@ -106,18 +98,8 @@ public class DescriptionTemplateTypePersist { .failOn(DescriptionTemplateTypePersist._name).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionTemplateTypePersist._name}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> !this.isEmpty(item.getName())) - .must(() -> this.lessEqual(item.getName(), DescriptionTemplateTypeEntity._nameLength)) + .must(() -> this.lessEqualLength(item.getName(), DescriptionTemplateTypeEntity._nameLength)) .failOn(DescriptionTemplateTypePersist._name).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{DescriptionTemplateTypePersist._name}, LocaleContextHolder.getLocale())) -// this.refSpec() -// .iff(() -> item.getObj() != null) -// .on(DescriptionTemplateTypePersist._obj) -// .over(item.getObj()) -// .using(() -> this.validatorFactory.validator(DescriptionTemplateTypePersistValidator.class)), -// this.navSpec() -// .iff(() -> item.getNested() != null) -// .on(DescriptionTemplateTypePersist._nested) -// .over(item.getNested()) -// .using(() -> this.validatorFactory.validator(DescriptionTemplateTypePersistValidator.class)) ); } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/ReferencePersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/ReferencePersist.java index 9635ea972..cff67cae7 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/ReferencePersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/ReferencePersist.java @@ -186,7 +186,7 @@ public class ReferencePersist { .failOn(ReferencePersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{ReferencePersist._label}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> !this.isEmpty(item.getLabel())) - .must(() -> this.lessEqual(item.getLabel(), ReferencePersist._labelLength)) + .must(() -> this.lessEqualLength(item.getLabel(), ReferencePersist._labelLength)) .failOn(ReferencePersist._label).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{ReferencePersist._label}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isNull(item.getType())) @@ -196,21 +196,21 @@ public class ReferencePersist { .failOn(ReferencePersist._reference).failWith(messageSource.getMessage("Validation_Required", new Object[]{ReferencePersist._reference}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> !this.isEmpty(item.getReference())) - .must(() -> this.lessEqual(item.getReference(), ReferencePersist._referenceLength)) + .must(() -> this.lessEqualLength(item.getReference(), ReferencePersist._referenceLength)) .failOn(ReferencePersist._reference).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{ReferencePersist._reference}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isEmpty(item.getAbbreviation())) .failOn(ReferencePersist._abbreviation).failWith(messageSource.getMessage("Validation_Required", new Object[]{ReferencePersist._abbreviation}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> !this.isEmpty(item.getAbbreviation())) - .must(() -> this.lessEqual(item.getAbbreviation(), ReferencePersist._abbreviationLength)) + .must(() -> this.lessEqualLength(item.getAbbreviation(), ReferencePersist._abbreviationLength)) .failOn(ReferencePersist._abbreviation).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{ReferencePersist._abbreviation}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isEmpty(item.getSource())) .failOn(ReferencePersist._source).failWith(messageSource.getMessage("Validation_Required", new Object[]{ReferencePersist._source}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> !this.isEmpty(item.getSource())) - .must(() -> this.lessEqual(item.getSource(), ReferencePersist._sourceLength)) + .must(() -> this.lessEqualLength(item.getSource(), ReferencePersist._sourceLength)) .failOn(ReferencePersist._source).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{ReferencePersist._source}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isNull(item.getSourceType())) diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/TagPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/TagPersist.java index b085a074b..7ab51e0f2 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/TagPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/TagPersist.java @@ -87,7 +87,7 @@ public class TagPersist { .failOn(TagPersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{TagPersist._label}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> !this.isEmpty(item.getLabel())) - .must(() -> this.lessEqual(item.getLabel(), TagEntity._labelLength)) + .must(() -> this.lessEqualLength(item.getLabel(), TagEntity._labelLength)) .failOn(TagPersist._label).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{TagPersist._label}, LocaleContextHolder.getLocale())) ); } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/UserDescriptionTemplatePersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/UserDescriptionTemplatePersist.java index a829bf95e..2a93cebb1 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/UserDescriptionTemplatePersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/UserDescriptionTemplatePersist.java @@ -1,36 +1,75 @@ package eu.eudat.model.persist; import eu.eudat.commons.enums.UserDescriptionTemplateRole; -import eu.eudat.commons.validation.old.FieldNotNullIfOtherSet; -import eu.eudat.commons.validation.old.ValidEnum; -import eu.eudat.commons.validation.old.ValidId; -import jakarta.validation.constraints.NotNull; +import eu.eudat.commons.validation.BaseValidator; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; +import java.util.Arrays; +import java.util.List; import java.util.UUID; -@FieldNotNullIfOtherSet(message = "{validation.hashempty}") public class UserDescriptionTemplatePersist { - @NotNull(message = "{validation.empty}") - @ValidId(message = "{validation.invalidid}") - private UUID userId = null; + private UUID userId = null; - @ValidEnum(message = "{validation.empty}") - private UserDescriptionTemplateRole role; + public static final String _userId = "userId"; - public UUID getUserId() { - return userId; - } + private UserDescriptionTemplateRole role; - public void setUserId(UUID userId) { - this.userId = userId; - } + public static final String _role = "role"; - public UserDescriptionTemplateRole getRole() { - return role; - } + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public UserDescriptionTemplateRole getRole() { + return role; + } + + public void setRole(UserDescriptionTemplateRole role) { + this.role = role; + } + + @Component(UserDescriptionTemplatePersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class UserDescriptionTemplatePersistValidator extends BaseValidator { + + public static final String ValidatorName = "UserDescriptionTemplatePersistValidator"; + + private final MessageSource messageSource; + + protected UserDescriptionTemplatePersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors); + this.messageSource = messageSource; + } + + @Override + protected Class modelClass() { + return UserDescriptionTemplatePersist.class; + } + + @Override + protected List specifications(UserDescriptionTemplatePersist item) { + return Arrays.asList( + this.spec() + .must(() -> this.isValidGuid(item.getUserId())) + .failOn(UserDescriptionTemplatePersist._userId).failWith(messageSource.getMessage("Validation_Required", new Object[]{UserDescriptionTemplatePersist._userId}, LocaleContextHolder.getLocale())), + this.spec() + .must(() -> !this.isNull(item.getRole())) + .failOn(UserDescriptionTemplatePersist._role).failWith(messageSource.getMessage("Validation_Required", new Object[]{UserDescriptionTemplatePersist._role}, LocaleContextHolder.getLocale())) + ); + } + } - public void setRole(UserDescriptionTemplateRole role) { - this.role = role; - } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/FieldPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/FieldPersist.java index bf8fdaef1..505a833b5 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/FieldPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/FieldPersist.java @@ -207,7 +207,87 @@ public class FieldPersist { .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.RADIO_BOX) .on(FieldPersist._data) .over(item.getData()) - .using(() -> this.validatorFactory.validator(RadioBoxDataPersist.RadioBoxDataPersistValidator.class)) + .using(() -> this.validatorFactory.validator(RadioBoxDataPersist.RadioBoxDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.REGISTRIES) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(RegistryDataPersist.RegistryDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.INTERNAL_DMP_ENTRIES_RESEARCHERS) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(ResearcherAutoCompleteDataPersist.ResearcherAutoCompleteDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.RESEARCHERS) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(ResearcherDataPersist.ResearcherDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.RICH_TEXT_AREA) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(RichTextAreaDataPersist.RichTextAreaDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.SERVICES) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(ServiceDataPersist.ServiceDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.TAGS) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(TagDataPersist.TagDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.TAXONOMIES) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(TaxonomyDataPersist.TaxonomyDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.TEXT_AREA) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(TextAreaDataPersist.TextAreaDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.UPLOAD) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(UploadDataPersist.UploadDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.VALIDATION) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(ValidationDataPersist.ValidationDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.DATASET_IDENTIFIER) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(DatasetIdentifierDataPersist.DatasetIdentifierDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.CURRENCY) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(CurrencyDataPersist.CurrencyDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.WORD_LIST) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(WordListDataPersist.WordListDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.DATA_REPOSITORIES) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(DataRepositoryDataPersist.DataRepositoryDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.JOURNAL_REPOSITORIES) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(JournalRepositoryDataPersist.JournalRepositoryDataPersistValidator.class)), + this.refSpec() + .iff(() -> !this.isNull(item.getData()) && item.getData().getFieldType() == FieldType.PUBLICATIONS) + .on(FieldPersist._data) + .over(item.getData()) + .using(() -> this.validatorFactory.validator(PublicationRepositoryDataPersist.PublicationRepositoryDataPersistValidator.class)) ); } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/CurrencyDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/CurrencyDataPersist.java index 1f61c3f43..99ca7db47 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/CurrencyDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/CurrencyDataPersist.java @@ -1,5 +1,36 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; + public class CurrencyDataPersist extends BaseFieldDataPersist { - + + @Component(CurrencyDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class CurrencyDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.CurrencyDataPersistValidator"; + + protected CurrencyDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return CurrencyDataPersist.class; + } + + @Override + protected List specifications(CurrencyDataPersist item) { + return getBaseSpecifications(item); + } + + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/DataRepositoryDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/DataRepositoryDataPersist.java index 04942d7fe..42539a96d 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/DataRepositoryDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/DataRepositoryDataPersist.java @@ -1,11 +1,22 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; -import jakarta.validation.constraints.NotNull; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; + +import java.util.List; public class DataRepositoryDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") + private Boolean multiAutoComplete = null; + public static final String _multiAutoComplete = "multiAutoComplete"; + public Boolean getMultiAutoComplete() { return multiAutoComplete; } @@ -13,4 +24,32 @@ public class DataRepositoryDataPersist extends BaseFieldDataPersist { public void setMultiAutoComplete(Boolean multiAutoComplete) { this.multiAutoComplete = multiAutoComplete; } + + @Component(DataRepositoryDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class DataRepositoryDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.DataRepositoryDataPersistValidator"; + + protected DataRepositoryDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return DataRepositoryDataPersist.class; + } + + @Override + protected List specifications(DataRepositoryDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.add( + this.spec() + .must(() -> !this.isNull(item.getMultiAutoComplete())) + .failOn(DataRepositoryDataPersist._multiAutoComplete).failWith(messageSource.getMessage("Validation_Required", new Object[]{DataRepositoryDataPersist._multiAutoComplete}, LocaleContextHolder.getLocale())) + ); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/DatasetIdentifierDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/DatasetIdentifierDataPersist.java index c0d0f6163..080b909af 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/DatasetIdentifierDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/DatasetIdentifierDataPersist.java @@ -1,6 +1,36 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; public class DatasetIdentifierDataPersist extends BaseFieldDataPersist { - + + @Component(DatasetIdentifierDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class DatasetIdentifierDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.DatasetIdentifierDataPersistValidator"; + + protected DatasetIdentifierDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return DatasetIdentifierDataPersist.class; + } + + @Override + protected List specifications(DatasetIdentifierDataPersist item) { + return getBaseSpecifications(item); + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/JournalRepositoryDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/JournalRepositoryDataPersist.java index de1d7f3b1..ccd7d0d3f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/JournalRepositoryDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/JournalRepositoryDataPersist.java @@ -1,11 +1,22 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; -import jakarta.validation.constraints.NotNull; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; + +import java.util.List; public class JournalRepositoryDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") + private Boolean multiAutoComplete = null; + public static final String _multiAutoComplete = "multiAutoComplete"; + public Boolean getMultiAutoComplete() { return multiAutoComplete; } @@ -13,4 +24,32 @@ public class JournalRepositoryDataPersist extends BaseFieldDataPersist { public void setMultiAutoComplete(Boolean multiAutoComplete) { this.multiAutoComplete = multiAutoComplete; } + + @Component(JournalRepositoryDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class JournalRepositoryDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.JournalRepositoryDataPersistValidator"; + + protected JournalRepositoryDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return JournalRepositoryDataPersist.class; + } + + @Override + protected List specifications(JournalRepositoryDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.add( + this.spec() + .must(() -> !this.isNull(item.getMultiAutoComplete())) + .failOn(JournalRepositoryDataPersist._multiAutoComplete).failWith(messageSource.getMessage("Validation_Required", new Object[]{JournalRepositoryDataPersist._multiAutoComplete}, LocaleContextHolder.getLocale())) + ); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/PublicationRepositoryDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/PublicationRepositoryDataPersist.java index c5055221b..60321f8e0 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/PublicationRepositoryDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/PublicationRepositoryDataPersist.java @@ -1,11 +1,23 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; import jakarta.validation.constraints.NotNull; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; + +import java.util.List; public class PublicationRepositoryDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") + private Boolean multiAutoComplete = null; + public static final String _multiAutoComplete = "multiAutoComplete"; + public Boolean getMultiAutoComplete() { return multiAutoComplete; } @@ -13,4 +25,32 @@ public class PublicationRepositoryDataPersist extends BaseFieldDataPersist { public void setMultiAutoComplete(Boolean multiAutoComplete) { this.multiAutoComplete = multiAutoComplete; } + + @Component(PublicationRepositoryDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class PublicationRepositoryDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.PublicationRepositoryDataPersistValidator"; + + protected PublicationRepositoryDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return PublicationRepositoryDataPersist.class; + } + + @Override + protected List specifications(PublicationRepositoryDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.add( + this.spec() + .must(() -> !this.isNull(item.getMultiAutoComplete())) + .failOn(PublicationRepositoryDataPersist._multiAutoComplete).failWith(messageSource.getMessage("Validation_Required", new Object[]{PublicationRepositoryDataPersist._multiAutoComplete}, LocaleContextHolder.getLocale())) + ); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RadioBoxDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RadioBoxDataPersist.java index 63e48a63e..73de32e27 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RadioBoxDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RadioBoxDataPersist.java @@ -47,7 +47,8 @@ public class RadioBoxDataPersist extends BaseFieldDataPersist { @Override protected List specifications(RadioBoxDataPersist item) { - return Arrays.asList( + List specifications = getBaseSpecifications(item); + specifications.addAll(Arrays.asList( this.spec() .must(() -> !this.isNull(item.getOptions())) .failOn(RadioBoxDataPersist._options).failWith(messageSource.getMessage("Validation_Required", new Object[]{RadioBoxDataPersist._options}, LocaleContextHolder.getLocale())), @@ -56,7 +57,8 @@ public class RadioBoxDataPersist extends BaseFieldDataPersist { .on(RadioBoxDataPersist._options) .over(item.getOptions()) .using(() -> this.validatorFactory.validator(RadioBoxOptionPersist.RadioBoxOptionPersistValidator.class)) - ); + )); + return specifications; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RegistryDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RegistryDataPersist.java index f985d5619..d400f29f9 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RegistryDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RegistryDataPersist.java @@ -1,12 +1,22 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; -import jakarta.validation.constraints.NotNull; +import java.util.List; public class RegistryDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") + private Boolean multiAutoComplete = null; + public static final String _multiAutoComplete = "multiAutoComplete"; + public Boolean getMultiAutoComplete() { return multiAutoComplete; } @@ -15,4 +25,31 @@ public class RegistryDataPersist extends BaseFieldDataPersist { this.multiAutoComplete = multiAutoComplete; } + @Component(RegistryDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class RegistryDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.RegistryDataPersistValidator"; + + protected RegistryDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return RegistryDataPersist.class; + } + + @Override + protected List specifications(RegistryDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.add( + this.spec() + .must(() -> !this.isNull(item.getMultiAutoComplete())) + .failOn(RegistryDataPersist._multiAutoComplete).failWith(messageSource.getMessage("Validation_Required", new Object[]{RegistryDataPersist._multiAutoComplete}, LocaleContextHolder.getLocale())) + ); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ResearcherAutoCompleteDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ResearcherAutoCompleteDataPersist.java index 6badb3b84..d53f286a6 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ResearcherAutoCompleteDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ResearcherAutoCompleteDataPersist.java @@ -1,15 +1,54 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; -import jakarta.validation.constraints.NotNull; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; + +import java.util.List; public class ResearcherAutoCompleteDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") + private Boolean multiAutoComplete = null; + public static final String _multiAutoComplete = "multiAutoComplete"; + public Boolean getMultiAutoComplete() { return multiAutoComplete; } public void setMultiAutoComplete(Boolean multiAutoComplete) { this.multiAutoComplete = multiAutoComplete; } + + @Component(ResearcherAutoCompleteDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class ResearcherAutoCompleteDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.ResearcherAutoCompleteDataPersistValidator"; + + protected ResearcherAutoCompleteDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return ResearcherAutoCompleteDataPersist.class; + } + + @Override + protected List specifications(ResearcherAutoCompleteDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.add( + this.spec() + .must(() -> !this.isNull(item.getMultiAutoComplete())) + .failOn(ResearcherAutoCompleteDataPersist._multiAutoComplete).failWith(messageSource.getMessage("Validation_Required", new Object[]{ResearcherAutoCompleteDataPersist._multiAutoComplete}, LocaleContextHolder.getLocale())) + ); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ResearcherDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ResearcherDataPersist.java index 15f63835e..016489dd3 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ResearcherDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ResearcherDataPersist.java @@ -1,12 +1,22 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; -import jakarta.validation.constraints.NotNull; +import java.util.List; public class ResearcherDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") + private Boolean multiAutoComplete = null; + public static final String _multiAutoComplete = "multiAutoComplete"; + public Boolean getMultiAutoComplete() { return multiAutoComplete; } @@ -15,4 +25,31 @@ public class ResearcherDataPersist extends BaseFieldDataPersist { this.multiAutoComplete = multiAutoComplete; } + @Component(ResearcherDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class ResearcherDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.ResearcherDataPersistValidator"; + + protected ResearcherDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return ResearcherDataPersist.class; + } + + @Override + protected List specifications(ResearcherDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.add( + this.spec() + .must(() -> !this.isNull(item.getMultiAutoComplete())) + .failOn(ResearcherDataPersist._multiAutoComplete).failWith(messageSource.getMessage("Validation_Required", new Object[]{ResearcherDataPersist._multiAutoComplete}, LocaleContextHolder.getLocale())) + ); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RichTextAreaDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RichTextAreaDataPersist.java index e0ec93581..39395520f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RichTextAreaDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/RichTextAreaDataPersist.java @@ -1,6 +1,36 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; public class RichTextAreaDataPersist extends BaseFieldDataPersist { - + + @Component(RichTextAreaDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class RichTextAreaDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.RichTextAreaDataPersistValidator"; + + protected RichTextAreaDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return RichTextAreaDataPersist.class; + } + + @Override + protected List specifications(RichTextAreaDataPersist item) { + return getBaseSpecifications(item); + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ServiceDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ServiceDataPersist.java index 8831e617e..7024f6e0f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ServiceDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ServiceDataPersist.java @@ -1,12 +1,22 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; -import jakarta.validation.constraints.NotNull; +import java.util.List; public class ServiceDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") + private Boolean multiAutoComplete = null; + public static final String _multiAutoComplete = "multiAutoComplete"; + public Boolean getMultiAutoComplete() { return multiAutoComplete; } @@ -14,4 +24,32 @@ public class ServiceDataPersist extends BaseFieldDataPersist { public void setMultiAutoComplete(Boolean multiAutoComplete) { this.multiAutoComplete = multiAutoComplete; } + + @Component(ServiceDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class ServiceDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.ServiceDataPersistValidator"; + + protected ServiceDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return ServiceDataPersist.class; + } + + @Override + protected List specifications(ServiceDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.add( + this.spec() + .must(() -> !this.isNull(item.getMultiAutoComplete())) + .failOn(ServiceDataPersist._multiAutoComplete).failWith(messageSource.getMessage("Validation_Required", new Object[]{ServiceDataPersist._multiAutoComplete}, LocaleContextHolder.getLocale())) + ); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TagDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TagDataPersist.java index c3754bfa4..7ea9701f7 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TagDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TagDataPersist.java @@ -1,5 +1,36 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; public class TagDataPersist extends BaseFieldDataPersist { + + @Component(TagDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class TagDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.TagDataPersistValidator"; + + protected TagDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return TagDataPersist.class; + } + + @Override + protected List specifications(TagDataPersist item) { + return getBaseSpecifications(item); + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TaxonomyDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TaxonomyDataPersist.java index 81135f613..bf1bc0416 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TaxonomyDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TaxonomyDataPersist.java @@ -1,12 +1,22 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; -import jakarta.validation.constraints.NotNull; +import java.util.List; public class TaxonomyDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") + private Boolean multiAutoComplete = null; + public static final String _multiAutoComplete = "multiAutoComplete"; + public Boolean getMultiAutoComplete() { return multiAutoComplete; } @@ -15,4 +25,31 @@ public class TaxonomyDataPersist extends BaseFieldDataPersist { this.multiAutoComplete = multiAutoComplete; } + @Component(TaxonomyDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class TaxonomyDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.TaxonomyDataPersistValidator"; + + protected TaxonomyDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return TaxonomyDataPersist.class; + } + + @Override + protected List specifications(TaxonomyDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.add( + this.spec() + .must(() -> !this.isNull(item.getMultiAutoComplete())) + .failOn(TaxonomyDataPersist._multiAutoComplete).failWith(messageSource.getMessage("Validation_Required", new Object[]{TaxonomyDataPersist._multiAutoComplete}, LocaleContextHolder.getLocale())) + ); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TextAreaDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TextAreaDataPersist.java index 2ca56871c..6fe58f41f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TextAreaDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/TextAreaDataPersist.java @@ -1,5 +1,36 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; + public class TextAreaDataPersist extends BaseFieldDataPersist { + + @Component(TextAreaDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class TextAreaDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.TextAreaDataPersistValidator"; + + protected TextAreaDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return TextAreaDataPersist.class; + } + + @Override + protected List specifications(TextAreaDataPersist item) { + return getBaseSpecifications(item); + } + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/UploadDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/UploadDataPersist.java index 2810249e6..031bb5b23 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/UploadDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/UploadDataPersist.java @@ -1,16 +1,24 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.ValidatorFactory; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotNull; - +import java.util.Arrays; import java.util.List; public class UploadDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") - @Valid + private List types = null; + public static final String _types = "types"; + public List getTypes() { return types; } @@ -21,6 +29,8 @@ public class UploadDataPersist extends BaseFieldDataPersist { private Integer maxFileSizeInMB; + public static final String _maxFileSizeInMB = "maxFileSizeInMB"; + public Integer getMaxFileSizeInMB() { return maxFileSizeInMB; } @@ -29,6 +39,45 @@ public class UploadDataPersist extends BaseFieldDataPersist { this.maxFileSizeInMB = maxFileSizeInMB; } - + @Component(UploadDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class UploadDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.UploadDataPersistValidator"; + + private final ValidatorFactory validatorFactory; + + protected UploadDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource, ValidatorFactory validatorFactory) { + super(conventionService, errors, messageSource); + this.validatorFactory = validatorFactory; + } + + @Override + protected Class modelClass() { + return UploadDataPersist.class; + } + + @Override + protected List specifications(UploadDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.addAll(Arrays.asList( + this.spec() + .iff(() -> !this.isNull(item.getMaxFileSizeInMB())) + .must(() -> !this.lessEqual(item.getMaxFileSizeInMB(), Integer.MAX_VALUE)) + .failOn(UploadDataPersist._maxFileSizeInMB).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{UploadDataPersist._types}, LocaleContextHolder.getLocale())), + + this.spec() + .must(() -> !this.isNull(item.getTypes())) + .failOn(UploadDataPersist._types).failWith(messageSource.getMessage("Validation_Required", new Object[]{UploadDataPersist._types}, LocaleContextHolder.getLocale())), + this.navSpec() + .iff(() -> !this.isNull(item.getTypes())) + .on(UploadDataPersist._types) + .over(item.getTypes()) + .using(() -> this.validatorFactory.validator(UploadOptionPersist.UploadOptionPersistValidator.class)) + )); + return specifications; + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/UploadOptionPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/UploadOptionPersist.java index 8731d91f9..40cea46a5 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/UploadOptionPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/UploadOptionPersist.java @@ -1,31 +1,73 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; +import eu.eudat.commons.validation.BaseValidator; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; public class UploadOptionPersist { - @NotNull(message = "{validation.empty}") - @NotEmpty(message = "{validation.empty}") - private String label = null; + private String label = null; - @NotNull(message = "{validation.empty}") - @NotEmpty(message = "{validation.empty}") - private String value = null; + public static final String _label = "label"; - public String getLabel() { - return label; - } + private String value = null; - public void setLabel(String label) { - this.label = label; - } + public static final String _value = "value"; - public String getValue() { - return value; - } + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @Component(UploadOptionPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class UploadOptionPersistValidator extends BaseValidator { + + public static final String ValidatorName = "DescriptionTemplate.UploadOptionPersistValidator"; + + private final MessageSource messageSource; + + protected UploadOptionPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors); + this.messageSource = messageSource; + } + + @Override + protected Class modelClass() { + return UploadOptionPersist.class; + } + + @Override + protected List specifications(UploadOptionPersist item) { + return Arrays.asList( + this.spec() + .must(() -> !this.isEmpty(item.getLabel())) + .failOn(UploadOptionPersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{UploadOptionPersist._label}, LocaleContextHolder.getLocale())), + this.spec() + .must(() -> !this.isEmpty(item.getValue())) + .failOn(UploadOptionPersist._value).failWith(messageSource.getMessage("Validation_Required", new Object[]{UploadOptionPersist._value}, LocaleContextHolder.getLocale())) + ); + } + } - public void setValue(String value) { - this.value = value; - } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ValidationDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ValidationDataPersist.java index 383899149..c9a9e0842 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ValidationDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/ValidationDataPersist.java @@ -1,5 +1,36 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; + public class ValidationDataPersist extends BaseFieldDataPersist { - + + @Component(ValidationDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class ValidationDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.ValidationDataPersistValidator"; + + protected ValidationDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { + super(conventionService, errors, messageSource); + } + + @Override + protected Class modelClass() { + return ValidationDataPersist.class; + } + + @Override + protected List specifications(ValidationDataPersist item) { + return getBaseSpecifications(item); + } + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/WordListDataPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/WordListDataPersist.java index b4f85572c..235b08789 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/WordListDataPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptiontemplatedefinition/fielddata/WordListDataPersist.java @@ -1,17 +1,28 @@ package eu.eudat.model.persist.descriptiontemplatedefinition.fielddata; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotNull; +import eu.eudat.commons.validation.ValidatorFactory; +import eu.eudat.commons.validation.specification.Specification; +import eu.eudat.convention.ConventionService; +import eu.eudat.errorcode.ErrorThesaurusProperties; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Scope; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; +import java.util.Arrays; import java.util.List; public class WordListDataPersist extends BaseFieldDataPersist { - @NotNull(message = "{validation.empty}") - @Valid + private List options = null; - @NotNull(message = "{validation.empty}") + + public static final String _options = "options"; + private Boolean multiList = null; + public static final String _multiList = "multiList"; + public List getOptions() { return options; } @@ -27,4 +38,44 @@ public class WordListDataPersist extends BaseFieldDataPersist { public void setMultiList(Boolean multiList) { this.multiList = multiList; } + + @Component(WordListDataPersistValidator.ValidatorName) + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static class WordListDataPersistValidator extends BaseFieldDataPersistValidator { + + public static final String ValidatorName = "DescriptionTemplate.WordListDataPersistValidator"; + + private final ValidatorFactory validatorFactory; + + protected WordListDataPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource, ValidatorFactory validatorFactory) { + super(conventionService, errors, messageSource); + this.validatorFactory = validatorFactory; + } + + @Override + protected Class modelClass() { + return WordListDataPersist.class; + } + + @Override + protected List specifications(WordListDataPersist item) { + List specifications = getBaseSpecifications(item); + specifications.addAll(Arrays.asList( + this.spec() + .must(() -> !this.isNull(item.getMultiList())) + .failOn(WordListDataPersist._multiList).failWith(messageSource.getMessage("Validation_Required", new Object[]{WordListDataPersist._multiList}, LocaleContextHolder.getLocale())), + + this.spec() + .must(() -> !this.isNull(item.getOptions())) + .failOn(WordListDataPersist._options).failWith(messageSource.getMessage("Validation_Required", new Object[]{WordListDataPersist._options}, LocaleContextHolder.getLocale())), + this.navSpec() + .iff(() -> !this.isNull(item.getOptions())) + .on(WordListDataPersist._options) + .over(item.getOptions()) + .using(() -> this.validatorFactory.validator(ComboBoxOptionPersist.ComboBoxOptionPersistValidator.class)) + )); + return specifications; + } + } + }