From ed3f3ebb278b40705702dbd4c57da51f0e6c5a8f Mon Sep 17 00:00:00 2001 From: amentis Date: Tue, 19 Mar 2024 13:54:23 +0200 Subject: [PATCH] build description persist model for validate endpoint --- .../model/persist/DescriptionPersist.java | 12 +-- .../PropertyDefinitionPersist.java | 6 +- .../description/DescriptionServiceImpl.java | 90 ++++++++++++++++++- .../eu/eudat/service/dmp/DmpServiceImpl.java | 3 + .../dmp-finalize-dialog.component.html | 2 +- 5 files changed, 102 insertions(+), 11 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 43b70f284..2544abf19 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 @@ -208,12 +208,12 @@ public class DescriptionPersist { .iff(() -> !this.isNull(item.getProperties())) .on(DescriptionPersist._properties) .over(item.getProperties()) - .using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class).setStatus(item.getStatus()).withDefinition(definition)), - this.navSpec() - .iff(() -> !this.isNull(item.getTags())) - .on(DescriptionPersist._tags) - .over(item.getTags()) - .using((itm) -> this.validatorFactory.validator(TagPersist.TagPersistValidator.class)) + .using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class).setStatus(item.getStatus()).withDefinition(definition)) +// this.navSpec() +// .iff(() -> !this.isNull(item.getTags())) +// .on(DescriptionPersist._tags) +// .over(item.getTags()) +// .using((itm) -> this.validatorFactory.validator(TagPersist.TagPersistValidator.class)) ); } } 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 d34943d89..0dc4fab0e 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 @@ -103,8 +103,10 @@ public class PropertyDefinitionPersist { boolean requiredAtLeastOneFieldSet = fieldSet.getMultiplicity() != null && fieldSet.getMultiplicity().getMin() > 0; if (requiredAtLeastOneFieldSet) { if (item == null || item.getFieldSets() == null) missingMultipleFieldSets.add(fieldSet); - PropertyDefinitionFieldSetPersist fieldSetPersist = item.getFieldSets().getOrDefault(fieldSet.getId(), null); - if (fieldSetPersist == null) missingMultipleFieldSets.add(fieldSet); + if (item.getFieldSets() != null) { + PropertyDefinitionFieldSetPersist fieldSetPersist = item.getFieldSets().getOrDefault(fieldSet.getId(), null); + if (fieldSetPersist == null) missingMultipleFieldSets.add(fieldSet); + } } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java index 419dd3be1..26617a2a0 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java @@ -380,9 +380,8 @@ public class DescriptionServiceImpl implements DescriptionService { for (DescriptionEntity description: descriptions) { DescriptionValidationResult descriptionValidationResult = new DescriptionValidationResult(description.getId(), DescriptionValidationOutput.Invalid); -// // TODO Persist DescriptionPersist.DescriptionPersistValidator validator = this.validatorFactory.validator(DescriptionPersist.DescriptionPersistValidator.class); - validator.validate(new DescriptionPersist()); + validator.validate(this.buildDescriptionPersist(description)); if (validator.result().isValid()) descriptionValidationResult.setResult(DescriptionValidationOutput.Valid);; descriptionValidationResults.add(descriptionValidationResult); @@ -836,4 +835,91 @@ public class DescriptionServiceImpl implements DescriptionService { return storageFile; } + + //region build persist + + private @NotNull DescriptionPersist buildDescriptionPersist(DescriptionEntity data){ + DescriptionPersist persist = new DescriptionPersist(); + if (data == null) return persist; + + DescriptionTemplateEntity descriptionTemplateEntity = this.entityManager.find(DescriptionTemplateEntity.class, data.getDescriptionTemplateId()); + if (descriptionTemplateEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{data.getDescriptionTemplateId(), DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale())); + + persist.setLabel(data.getLabel()); + persist.setStatus(data.getStatus()); + persist.setDescription(data.getDescription()); + persist.setDescriptionTemplateId(data.getDescriptionTemplateId()); + persist.setDmpId(data.getDmpId()); + persist.setDmpDescriptionTemplateId(data.getDmpDescriptionTemplateId()); + + eu.eudat.commons.types.descriptiontemplate.DefinitionEntity definition = this.xmlHandlingService.fromXmlSafe(eu.eudat.commons.types.descriptiontemplate.DefinitionEntity.class, descriptionTemplateEntity.getDefinition()); + + persist.setProperties(this.buildPropertyDefinitionPersist( this.jsonHandlingService.fromJsonSafe(PropertyDefinitionEntity.class, data.getProperties()), definition)); + + return persist; + } + + private @NotNull PropertyDefinitionPersist buildPropertyDefinitionPersist(PropertyDefinitionEntity data, eu.eudat.commons.types.descriptiontemplate.DefinitionEntity definition){ + PropertyDefinitionPersist persist = new PropertyDefinitionPersist(); + if (data == null) return persist; + if (data.getFieldSets() != null && !data.getFieldSets().isEmpty()){ + persist.setFieldSets(new HashMap<>()); + for (String key: data.getFieldSets().keySet()) { + FieldSetEntity fieldSetEntity = definition != null ? definition.getFieldSetById(key).stream().findFirst().orElse(null) : null; + persist.getFieldSets().put(key, this.buildPropertyDefinitionFieldSetPersist(data.getFieldSets().get(key), fieldSetEntity)); + } + } + return persist; + } + + private @NotNull PropertyDefinitionFieldSetPersist buildPropertyDefinitionFieldSetPersist(PropertyDefinitionFieldSetEntity data, FieldSetEntity fieldSetEntity){ + PropertyDefinitionFieldSetPersist persist = new PropertyDefinitionFieldSetPersist(); + if (data == null) return persist; + if (!this.conventionService.isListNullOrEmpty(data.getItems())){ + persist.setItems(new ArrayList<>()); + for (PropertyDefinitionFieldSetItemEntity itemsPersist: data.getItems()) { + persist.getItems().add(this.buildPropertyDefinitionFieldSetItemPersist(itemsPersist, fieldSetEntity)); + } + } + return persist; + } + + private @NotNull PropertyDefinitionFieldSetItemPersist buildPropertyDefinitionFieldSetItemPersist(PropertyDefinitionFieldSetItemEntity data, FieldSetEntity fieldSetEntity){ + PropertyDefinitionFieldSetItemPersist persist = new PropertyDefinitionFieldSetItemPersist(); + if (data == null) return persist; + if (data.getFields() != null && !data.getFields().isEmpty()){ + persist.setOrdinal(data.getOrdinal()); + persist.setComment(data.getComment()); + persist.setFields(new HashMap<>()); + for (String key: data.getFields().keySet()) { + eu.eudat.commons.types.descriptiontemplate.FieldEntity fieldEntity = fieldSetEntity != null ? fieldSetEntity.getAllField().stream().findFirst().orElse(null) : null; + persist.getFields().put(key, this.buildFieldPersist(data.getFields().get(key), fieldEntity)); + } + } + return persist; + } + + private @NotNull FieldPersist buildFieldPersist(FieldEntity data, eu.eudat.commons.types.descriptiontemplate.FieldEntity fieldEntity) { + FieldType fieldType = fieldEntity != null && fieldEntity.getData() != null ? fieldEntity.getData().getFieldType() : FieldType.FREE_TEXT; + + FieldPersist persist = new FieldPersist(); + if (data == null) return persist; + + if (FieldType.isTextType(fieldType)) persist.setTextValue(data.getTextValue()); + else if (FieldType.isTextListType(fieldType)) persist.setTextListValue(data.getTextListValue()); + else if (FieldType.isDateType(fieldType)) persist.setDateValue(persist.getDateValue()); + else if (FieldType.isExternalIdentifierType(fieldType) && data.getExternalIdentifier() != null) persist.setExternalIdentifier(this.buildExternalIdentifierPersist(data.getExternalIdentifier())); + else if (FieldType.isReferenceType(fieldType) && fieldEntity != null ) persist.setTextListValue(data.getTextListValue()); + + return persist; + } + + private @NotNull ExternalIdentifierPersist buildExternalIdentifierPersist(ExternalIdentifierEntity data){ + ExternalIdentifierPersist persist = new ExternalIdentifierPersist(); + if (data == null) return persist; + + persist.setIdentifier(data.getIdentifier()); + persist.setType(data.getType()); + return persist; + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java index b11b7d16a..77a874889 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java @@ -836,6 +836,9 @@ public class DmpServiceImpl implements DmpService { if (description.getStatus().equals(DescriptionStatus.Finalized)){ throw new MyApplicationException("Description is already finalized"); } + if (this.descriptionService.validate(List.of(description.getId())).get(0).getResult().equals(DescriptionValidationOutput.Invalid)){ + throw new MyApplicationException("Description is invalid"); + } description.setStatus(DescriptionStatus.Finalized); description.setUpdatedAt(Instant.now()); description.setFinalizedAt(Instant.now()); diff --git a/dmp-frontend/src/app/ui/dmp/dmp-finalize-dialog/dmp-finalize-dialog.component.html b/dmp-frontend/src/app/ui/dmp/dmp-finalize-dialog/dmp-finalize-dialog.component.html index 9316e8c3a..1eec22dd5 100644 --- a/dmp-frontend/src/app/ui/dmp/dmp-finalize-dialog/dmp-finalize-dialog.component.html +++ b/dmp-frontend/src/app/ui/dmp/dmp-finalize-dialog/dmp-finalize-dialog.component.html @@ -36,7 +36,7 @@ : {{ description.label }} - +

{{ description.label }}