From 3c32e57aadc52a4b2e02c913ae08987e2a41ebf8 Mon Sep 17 00:00:00 2001 From: amentis Date: Wed, 31 Jan 2024 18:39:18 +0200 Subject: [PATCH] reference type editor changes --- .../QueryConfigPersist.java | 32 +++++++--- .../ReferenceTypeDefinitionPersist.java | 9 +-- .../notification-template-editor.model.ts | 4 +- .../reference-type-editor.component.html | 4 ++ .../editor/reference-type-editor.component.ts | 18 ++++-- .../editor/reference-type-editor.model.ts | 60 ++++++++++++++----- .../editor/reference-editor.model.ts | 4 +- 7 files changed, 93 insertions(+), 38 deletions(-) diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/QueryConfigPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/QueryConfigPersist.java index 9822bc75a..9bdfc9641 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/QueryConfigPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/QueryConfigPersist.java @@ -4,29 +4,33 @@ import eu.eudat.commons.validation.BaseValidator; import gr.cite.tools.validation.specification.Specification; import eu.eudat.convention.ConventionService; import eu.eudat.errorcode.ErrorThesaurusProperties; -import jakarta.xml.bind.annotation.XmlElement; 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.ArrayList; +import java.util.Arrays; import java.util.List; public class QueryConfigPersist { private String condition; + public static final String _condition = "condition"; private String separator; + public static final String _separator = "separator"; private String value; + public static final String _value = "value"; private Integer ordinal; + public static final String _ordinal = "ordinal"; public String getCondition() { return condition; } - @XmlElement(name = "condition") public void setCondition(String condition) { this.condition = condition; } @@ -35,7 +39,6 @@ public class QueryConfigPersist { return separator; } - @XmlElement(name = "separator") public void setSeparator(String separator) { this.separator = separator; } @@ -44,7 +47,6 @@ public class QueryConfigPersist { return value; } - @XmlElement(name = "value") public void setValue(String value) { this.value = value; } @@ -53,7 +55,6 @@ public class QueryConfigPersist { return ordinal; } - @XmlElement(name = "ordinal") public void setOrdinal(Integer ordinal) { this.ordinal = ordinal; } @@ -63,9 +64,11 @@ public class QueryConfigPersist { public static class QueryConfigPersistValidator extends BaseValidator { public static final String ValidatorName = "QueryConfigPersistValidator"; + private final MessageSource messageSource; - protected QueryConfigPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors) { + protected QueryConfigPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) { super(conventionService, errors); + this.messageSource = messageSource; } @Override @@ -75,7 +78,20 @@ public class QueryConfigPersist { @Override protected List specifications(QueryConfigPersist item) { - return new ArrayList<>(); + return Arrays.asList( + this.spec() + .must(() -> !this.isEmpty(item.getCondition())) + .failOn(QueryConfigPersist._condition).failWith(messageSource.getMessage("Validation_Required", new Object[]{QueryConfigPersist._condition}, LocaleContextHolder.getLocale())), + this.spec() + .must(() -> !this.isEmpty(item.getSeparator())) + .failOn(QueryConfigPersist._separator).failWith(messageSource.getMessage("Validation_Required", new Object[]{QueryConfigPersist._separator}, LocaleContextHolder.getLocale())), + this.spec() + .must(() -> !this.isEmpty(item.getValue())) + .failOn(QueryConfigPersist._value).failWith(messageSource.getMessage("Validation_Required", new Object[]{QueryConfigPersist._value}, LocaleContextHolder.getLocale())), + this.spec() + .must(() -> !this.isNull(item.getOrdinal())) + .failOn(QueryConfigPersist._ordinal).failWith(messageSource.getMessage("Validation_Required", new Object[]{QueryConfigPersist._ordinal}, LocaleContextHolder.getLocale())) + ); } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeDefinitionPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeDefinitionPersist.java index ccb03e6aa..dc2ec8eb8 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeDefinitionPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeDefinitionPersist.java @@ -76,13 +76,8 @@ public class ReferenceTypeDefinitionPersist { this.navSpec() .iff(() -> !this.isListNullOrEmpty(item.getSources())) .on(ReferenceTypeDefinitionPersist._sources) - .over(item.getSources().stream().filter(x -> x.getType() == ReferenceTypeSourceType.API).toList()) - .using((itm) -> this.validatorFactory.validator(ReferenceTypeSourceExternalApiConfigurationPersist.ReferenceTypeSourceExternalApiConfigurationPersistValidator.class)), - this.navSpec() - .iff(() -> !this.isListNullOrEmpty(item.getSources())) - .on(ReferenceTypeDefinitionPersist._sources) - .over(item.getSources().stream().filter(x -> x.getType() == ReferenceTypeSourceType.STATIC).toList()) - .using((itm) -> this.validatorFactory.validator(ReferenceTypeSourceStaticOptionConfigurationPersist.ReferenceTypeSourceStaticOptionConfigurationPersistValidator.class)) + .over(item.getSources()) + .using((itm) -> ((ReferenceTypeSourceBaseConfigurationPersist) itm).getType() == ReferenceTypeSourceType.STATIC? this.validatorFactory.validator(ReferenceTypeSourceStaticOptionConfigurationPersist.ReferenceTypeSourceStaticOptionConfigurationPersistValidator.class): this.validatorFactory.validator(ReferenceTypeSourceExternalApiConfigurationPersist.ReferenceTypeSourceExternalApiConfigurationPersistValidator.class)) ); } } diff --git a/dmp-frontend/src/app/ui/admin/notification-template/editor/notification-template-editor.model.ts b/dmp-frontend/src/app/ui/admin/notification-template/editor/notification-template-editor.model.ts index a10353729..6eb036809 100644 --- a/dmp-frontend/src/app/ui/admin/notification-template/editor/notification-template-editor.model.ts +++ b/dmp-frontend/src/app/ui/admin/notification-template/editor/notification-template-editor.model.ts @@ -264,8 +264,8 @@ export class NotificationFieldOptionsEditorModel implements NotificationFieldOpt this.validationErrorModel ).fromModel(item).buildForm({ rootPath: `${rootPath}optional[${index}].` - }), context.getValidation('optional') - ) + }) + ), context.getValidation('optional').validators ), }); diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html index 6e4c01af0..b82b8821d 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html @@ -550,6 +550,8 @@ + {{'REFERENCE-TYPE-EDITOR.SOURCES-REQUIRED' | translate}} + {{dependency.get('properties').getError('backendError').message}} @@ -561,6 +563,8 @@ + {{'REFERENCE-TYPE-EDITOR.SOURCES-REQUIRED' | translate}} + {{formGroup.get('definition').get('sources').getError('backendError').message}} diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts index da570d517..e1809d133 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts @@ -172,9 +172,9 @@ export class ReferenceTypeEditorComponent extends BaseEditor QueryConfigEditorModel.reapplyValidators({ + formGroup: control as UntypedFormGroup, + rootPath: `${rootPath}queries[${index}].`, + validationErrorModel: validationErrorModel + }) + ); + (formGroup.get('dependencies') as FormArray).controls?.forEach( (control, index) => ReferenceTypeSourceBaseDependencyEditorModel.reapplyDepedencyValidators({ formGroup: control as UntypedFormGroup, @@ -541,8 +554,8 @@ export class ResultsConfigurationEditorModel implements ResultsConfigurationPers this.validationErrorModel ).fromModel(item).buildForm({ rootPath: `${rootPath}fieldsMapping[${index}].` - }), context.getValidation('fieldsMapping') - ) + }) + ), context.getValidation('fieldsMapping').validators ) }); @@ -808,6 +821,25 @@ export class QueryConfigEditorModel implements QueryConfigPersist { baseContext.validation = baseValidationArray; return baseContext; } + + static reapplyValidators(params: { + formGroup: UntypedFormGroup, + validationErrorModel: ValidationErrorModel, + rootPath: string + }): void { + + const { formGroup, rootPath, validationErrorModel } = params; + const context = QueryConfigEditorModel.createValidationContext({ + rootPath, + validationErrorModel + }); + + ['condition', 'separator', 'value', 'ordinal'].forEach(keyField => { + const control = formGroup?.get(keyField); + control?.clearValidators(); + control?.addValidators(context.getValidation(keyField).validators); + }) + } } export class ReferenceTypeStaticOptionEditorModel implements ReferenceTypeStaticOptionPersist { @@ -928,8 +960,8 @@ export class ReferenceTypeSourceBaseDependencyEditorModel implements ReferenceTy this.validationErrorModel ).fromModel(item).buildForm({ rootPath: `${rootPath}properties[${index}].` - }), context.getValidation('properties') - ) + }) + ), context.getValidation('properties').validators ), }); } diff --git a/dmp-frontend/src/app/ui/admin/reference/editor/reference-editor.model.ts b/dmp-frontend/src/app/ui/admin/reference/editor/reference-editor.model.ts index 86c72904d..93ec43129 100644 --- a/dmp-frontend/src/app/ui/admin/reference/editor/reference-editor.model.ts +++ b/dmp-frontend/src/app/ui/admin/reference/editor/reference-editor.model.ts @@ -133,8 +133,8 @@ export class DefinitionEditorModel implements DefinitionPersist { this.validationErrorModel ).fromModel(item).buildForm({ rootPath: `${rootPath}fields[${index}].` - }), context.getValidation('fields') - ) + }) + ), context.getValidation('fields').validators ), }); }