From 99ae216cf36f5009e1c6efd751af5a0e7e656573 Mon Sep 17 00:00:00 2001 From: amentis Date: Thu, 25 Apr 2024 10:48:13 +0300 Subject: [PATCH] change description validator with visibility service --- .../model/persist/DescriptionPersist.java | 2 +- .../descriptionproperties/FieldPersist.java | 46 ++++++++----------- ...PropertyDefinitionFieldSetItemPersist.java | 24 +++------- .../PropertyDefinitionFieldSetPersist.java | 9 ++-- .../PropertyDefinitionPersist.java | 13 +++--- 5 files changed, 36 insertions(+), 58 deletions(-) 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 da053e457..741e5adaf 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 @@ -228,7 +228,7 @@ public class DescriptionPersist { .iff(() -> item.getStatus() == DescriptionStatus.Finalized) .on(DescriptionPersist._properties) .over(item.getProperties()) - .using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class).setStatus(item.getStatus()).withDefinition(definition).withRules(definition)) + .using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class).setStatus(item.getStatus()).withDefinition(definition).setVisibilityService(definition, item.getProperties())) // this.navSpec() // .iff(() -> !this.isNull(item.getTags())) // .on(DescriptionPersist._tags) diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/FieldPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/FieldPersist.java index 461857b2e..34cbb47c3 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/FieldPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/FieldPersist.java @@ -7,6 +7,7 @@ import eu.eudat.commons.types.descriptiontemplate.FieldEntity; import eu.eudat.commons.types.descriptiontemplate.RuleEntity; import eu.eudat.commons.validation.BaseValidator; import eu.eudat.model.persist.ReferencePersist; +import eu.eudat.service.visibility.VisibilityService; import gr.cite.tools.validation.ValidatorFactory; import gr.cite.tools.validation.specification.Specification; import eu.eudat.convention.ConventionService; @@ -96,8 +97,8 @@ public class FieldPersist { private final MessageSource messageSource; private FieldEntity fieldEntity; private DescriptionStatus status; - private List> rules; - private Boolean fieldSetIsRuleTarget; + private VisibilityService visibilityService; + private Integer ordinal; protected PersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, ValidatorFactory validatorFactory, MessageSource messageSource) { super(conventionService, errors); @@ -114,34 +115,34 @@ public class FieldPersist { protected List specifications(FieldPersist item) { FieldType fieldType = this.fieldEntity != null && this.fieldEntity.getData() != null ? this.fieldEntity.getData().getFieldType() : FieldType.FREE_TEXT; boolean required = this.fieldEntity != null && this.fieldEntity.getValidations() != null ? this.fieldEntity.getValidations().contains(FieldValidationType.Required) : false; - boolean isRuleTarget = this.checkIfFieldIsRuleTarget(); + boolean isVisible = this.visibilityService.isVisible(fieldEntity.getId(), ordinal); return Arrays.asList( this.spec() - .iff(()-> FieldType.isTextType(fieldType) && !fieldType.equals(FieldType.CHECK_BOX) && DescriptionStatus.Finalized.equals(this.status) && this.isListNullOrEmpty(fieldEntity.getVisibilityRules()) && !isRuleTarget && !fieldSetIsRuleTarget && required) + .iff(()-> FieldType.isTextType(fieldType) && !fieldType.equals(FieldType.CHECK_BOX) && DescriptionStatus.Finalized.equals(this.status) && isVisible && required) .must(() -> !this.isEmpty(item.getTextValue())) .failOn(FieldPersist._textValue).failWith(messageSource.getMessage("Validation_Required", new Object[]{FieldPersist._textValue}, LocaleContextHolder.getLocale())), this.spec() - .iff(()-> FieldType.isDateType(fieldType) && DescriptionStatus.Finalized.equals(this.status) && this.isListNullOrEmpty(fieldEntity.getVisibilityRules()) && !isRuleTarget && !fieldSetIsRuleTarget && required) + .iff(()-> FieldType.isDateType(fieldType) && DescriptionStatus.Finalized.equals(this.status) && isVisible && required) .must(() -> !this.isNull(item.getDateValue())) .failOn(FieldPersist._dateValue).failWith(messageSource.getMessage("Validation_Required", new Object[]{FieldPersist._dateValue}, LocaleContextHolder.getLocale())), this.spec() - .iff(()-> FieldType.isExternalIdentifierType(fieldType) && DescriptionStatus.Finalized.equals(this.status) && this.isListNullOrEmpty(fieldEntity.getVisibilityRules()) && !isRuleTarget && !fieldSetIsRuleTarget && required) + .iff(()-> FieldType.isExternalIdentifierType(fieldType) && DescriptionStatus.Finalized.equals(this.status) && isVisible && required) .must(() -> !this.isNull(item.getExternalIdentifier())) .failOn(FieldPersist._externalIdentifier).failWith(messageSource.getMessage("Validation_Required", new Object[]{FieldPersist._externalIdentifier}, LocaleContextHolder.getLocale())), this.spec() - .iff(()-> FieldType.isTextListType(fieldType) && DescriptionStatus.Finalized.equals(this.status) && this.isListNullOrEmpty(fieldEntity.getVisibilityRules()) && !isRuleTarget && !fieldSetIsRuleTarget && required && !fieldType.equals(FieldType.TAGS)) + .iff(()-> FieldType.isTextListType(fieldType) && DescriptionStatus.Finalized.equals(this.status) && isVisible && required && !fieldType.equals(FieldType.TAGS)) .must(() -> !this.isListNullOrEmpty(item.getTextListValue()) || !this.isEmpty(item.getTextValue())) .failOn(FieldPersist._textListValue).failWith(messageSource.getMessage("Validation_Required", new Object[]{FieldPersist._textListValue}, LocaleContextHolder.getLocale())), this.spec() - .iff(()-> fieldType.equals(FieldType.TAGS) && DescriptionStatus.Finalized.equals(this.status) && this.isListNullOrEmpty(fieldEntity.getVisibilityRules()) && !isRuleTarget && !fieldSetIsRuleTarget && required) + .iff(()-> fieldType.equals(FieldType.TAGS) && DescriptionStatus.Finalized.equals(this.status) && isVisible && required) .must(() -> !this.isListNullOrEmpty(item.getTextListValue())) .failOn(FieldPersist._textListValue).failWith(messageSource.getMessage("Validation_Required", new Object[]{FieldPersist._textListValue}, LocaleContextHolder.getLocale())), this.spec() - .iff(()-> FieldType.isReferenceType(fieldType) && DescriptionStatus.Finalized.equals(this.status) && this.isListNullOrEmpty(fieldEntity.getVisibilityRules()) && !isRuleTarget && !fieldSetIsRuleTarget && required) + .iff(()-> FieldType.isReferenceType(fieldType) && DescriptionStatus.Finalized.equals(this.status) && isVisible && required) .must(() -> !this.isListNullOrEmpty(item.getReferences()) || !this.isNull(item.getReference())) .failOn(FieldPersist._textListValue).failWith(messageSource.getMessage("Validation_Required", new Object[]{FieldPersist._textListValue}, LocaleContextHolder.getLocale())), this.spec() - .iff(()-> !this.isEmpty(item.getTextValue()) && (fieldType.equals(FieldType.CHECK_BOX) || fieldType.equals(FieldType.BOOLEAN_DECISION)) && this.isListNullOrEmpty(fieldEntity.getVisibilityRules()) && !isRuleTarget && !fieldSetIsRuleTarget) + .iff(()-> !this.isEmpty(item.getTextValue()) && (fieldType.equals(FieldType.CHECK_BOX) || fieldType.equals(FieldType.BOOLEAN_DECISION))) .must(() -> this.isBoolean(item.getTextValue())) .failOn(FieldPersist._textValue).failWith(messageSource.getMessage("Validation_UnexpectedValue", new Object[]{FieldPersist._textValue}, LocaleContextHolder.getLocale())), this.spec() @@ -171,30 +172,19 @@ public class FieldPersist { return this; } - public PersistValidator withRules(List> rules) { - this.rules = rules; - return this; - } - public PersistValidator setStatus(DescriptionStatus status) { this.status = status; return this; } - public PersistValidator ifFieldSetIsRuleTarget(Boolean fieldSetIsRuleTarget){ - this.fieldSetIsRuleTarget = fieldSetIsRuleTarget; - return this; + public PersistValidator withVisibilityService(VisibilityService visibilityService) { + this.visibilityService = visibilityService; + return this; } - private boolean checkIfFieldIsRuleTarget(){ - if (this.isListNullOrEmpty(rules)) return false; - for (List rulesBySection: rules) { - if (!this.isListNullOrEmpty(rulesBySection)){ - for (RuleEntity rule :rulesBySection) { - if (rule.getTarget().equals(this.fieldEntity.getId())) return true; - } - } - } - return false; + + public PersistValidator withOrdinal(Integer ordinal) { + this.ordinal = ordinal; + return this; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetItemPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetItemPersist.java index 673b7d774..60086987d 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetItemPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetItemPersist.java @@ -7,7 +7,7 @@ import eu.eudat.commons.types.descriptiontemplate.RuleEntity; import eu.eudat.commons.validation.BaseValidator; import eu.eudat.convention.ConventionService; import eu.eudat.errorcode.ErrorThesaurusProperties; -import eu.eudat.model.persist.DescriptionPersist; +import eu.eudat.service.visibility.VisibilityService; import gr.cite.tools.validation.ValidatorFactory; import gr.cite.tools.validation.specification.Specification; import org.springframework.context.MessageSource; @@ -61,8 +61,8 @@ public class PropertyDefinitionFieldSetItemPersist { private final MessageSource messageSource; private FieldSetEntity fieldSetEntity; - private List> rules; private DescriptionStatus status; + private VisibilityService visibilityService; protected PersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, ValidatorFactory validatorFactory, MessageSource messageSource) { super(conventionService, errors); this.validatorFactory = validatorFactory; @@ -88,7 +88,7 @@ public class PropertyDefinitionFieldSetItemPersist { .using((itm) -> { FieldEntity fieldEntity = fieldSetEntity != null ? fieldSetEntity.getFieldById((String)itm.getKey()).stream().findFirst().orElse(null) : null; - return this.validatorFactory.validator(FieldPersist.PersistValidator.class).withFieldEntity(fieldEntity).withRules(rules).ifFieldSetIsRuleTarget(this.checkIfFieldSetIsRuleTarget()).setStatus(this.status); + return this.validatorFactory.validator(FieldPersist.PersistValidator.class).withFieldEntity(fieldEntity).withVisibilityService(visibilityService).withOrdinal(item.getOrdinal()).setStatus(this.status); }) ); @@ -99,26 +99,14 @@ public class PropertyDefinitionFieldSetItemPersist { return this; } - public PersistValidator withRules(List> rules) { - this.rules = rules; - return this; - } - public PersistValidator setStatus(DescriptionStatus status) { this.status = status; return this; } - private Boolean checkIfFieldSetIsRuleTarget(){ - if (this.isListNullOrEmpty(rules)) return false; - for (List rulesBySection: rules) { - if (!this.isListNullOrEmpty(rulesBySection)){ - for (RuleEntity rule :rulesBySection) { - if (rule.getTarget().equals(this.fieldSetEntity.getId())) return true; - } - } - } - return false; + public PersistValidator withVisibilityService(VisibilityService visibilityService) { + this.visibilityService = visibilityService; + return this; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetPersist.java index 0ee158626..b7bf709ad 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetPersist.java @@ -6,6 +6,7 @@ import eu.eudat.commons.types.descriptiontemplate.RuleEntity; import eu.eudat.commons.validation.BaseValidator; import eu.eudat.convention.ConventionService; import eu.eudat.errorcode.ErrorThesaurusProperties; +import eu.eudat.service.visibility.VisibilityService; import gr.cite.tools.validation.ValidatorFactory; import gr.cite.tools.validation.specification.Specification; import org.springframework.context.MessageSource; @@ -36,7 +37,7 @@ public class PropertyDefinitionFieldSetPersist { private final MessageSource messageSource; private FieldSetEntity fieldSetEntity; private DescriptionStatus status; - private List> rules; + private VisibilityService visibilityService; protected PersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, ValidatorFactory validatorFactory, MessageSource messageSource, MessageSource messageSource1) { super(conventionService, errors); this.validatorFactory = validatorFactory; @@ -60,7 +61,7 @@ public class PropertyDefinitionFieldSetPersist { .iff(() -> !this.isNull(item.getItems())) .on(PropertyDefinitionFieldSetPersist._items) .over(item.getItems()) - .using((itm) -> this.validatorFactory.validator(PropertyDefinitionFieldSetItemPersist.PersistValidator.class).withFieldSetEntity(this.fieldSetEntity).withRules(this.rules).setStatus(this.status)), + .using((itm) -> this.validatorFactory.validator(PropertyDefinitionFieldSetItemPersist.PersistValidator.class).withFieldSetEntity(this.fieldSetEntity).withVisibilityService(this.visibilityService).setStatus(this.status)), this.spec() .iff(() -> DescriptionStatus.Finalized.equals(this.status) && min != null) .must(() -> !this.isListNullOrEmpty(item.getItems()) && min <= item.getItems().size()) @@ -77,8 +78,8 @@ public class PropertyDefinitionFieldSetPersist { return this; } - public PersistValidator withRules(List> rules) { - this.rules = rules; + public PersistValidator withVisibilityService(VisibilityService visibilityService) { + this.visibilityService = visibilityService; return this; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionPersist.java index 5e3537950..e81c14e57 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionPersist.java @@ -5,11 +5,12 @@ import eu.eudat.commons.enums.FieldValidationType; import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity; import eu.eudat.commons.types.descriptiontemplate.FieldEntity; import eu.eudat.commons.types.descriptiontemplate.FieldSetEntity; -import eu.eudat.commons.types.descriptiontemplate.RuleEntity; import eu.eudat.commons.validation.BaseValidator; import eu.eudat.convention.ConventionService; import eu.eudat.errorcode.ErrorThesaurusProperties; import eu.eudat.model.persist.validation.StatusAware; +import eu.eudat.service.visibility.VisibilityService; +import eu.eudat.service.visibility.VisibilityServiceImpl; import gr.cite.tools.validation.ValidatorFactory; import gr.cite.tools.validation.specification.Specification; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -47,8 +48,7 @@ public class PropertyDefinitionPersist { private DescriptionStatus status; private DefinitionEntity definition; - - private List> rules; + private VisibilityService visibilityService; protected PropertyDefinitionPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource, ValidatorFactory validatorFactory) { super(conventionService, errors); @@ -81,7 +81,7 @@ public class PropertyDefinitionPersist { .mapKey((k) -> ((String)k)) .using((itm) -> { FieldSetEntity fieldSetEntity = definition != null ? definition.getFieldSetById((String)itm.getKey()).stream().findFirst().orElse(null) : null; - return this.validatorFactory.validator(PropertyDefinitionFieldSetPersist.PersistValidator.class).withFieldSetEntity(fieldSetEntity).withRules(rules).setStatus(this.status); + return this.validatorFactory.validator(PropertyDefinitionFieldSetPersist.PersistValidator.class).withFieldSetEntity(fieldSetEntity).withVisibilityService(visibilityService).setStatus(this.status); }) ); } @@ -97,9 +97,8 @@ public class PropertyDefinitionPersist { return this; } - public PropertyDefinitionPersistValidator withRules(DefinitionEntity definition) { - List fields = definition.getAllField(); - this.rules = fields.stream().filter(x -> x.getVisibilityRules() != null).map(FieldEntity::getVisibilityRules).collect(Collectors.toList()); + public PropertyDefinitionPersistValidator setVisibilityService(DefinitionEntity definition, PropertyDefinitionPersist propertyDefinition) { + this.visibilityService = new VisibilityServiceImpl(definition, propertyDefinition); return this; }