diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DmpPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DmpPersist.java index 59000bde1..4feb21e77 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DmpPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DmpPersist.java @@ -2,11 +2,11 @@ package eu.eudat.model.persist; import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.commons.XmlHandlingService; -import eu.eudat.commons.enums.DmpAccessType; -import eu.eudat.commons.enums.DmpStatus; -import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.*; import eu.eudat.commons.types.dmpblueprint.DefinitionEntity; +import eu.eudat.commons.types.dmpblueprint.FieldEntity; import eu.eudat.commons.types.dmpblueprint.SectionEntity; +import eu.eudat.commons.types.dmpblueprint.SystemFieldEntity; import eu.eudat.commons.validation.BaseValidator; import eu.eudat.data.*; import eu.eudat.query.DescriptionQuery; @@ -27,6 +27,7 @@ import javax.management.InvalidApplicationException; import java.util.Arrays; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; public class DmpPersist { @@ -199,6 +200,14 @@ public class DmpPersist { DmpBlueprintEntity finalDmpBlueprintEntity = dmpBlueprintEntity; DefinitionEntity definition = dmpBlueprintEntity == null ? null : this.xmlHandlingService.fromXmlSafe(DefinitionEntity.class, dmpBlueprintEntity.getDefinition()); + String languageFieldLabel = null; + String accessFieldLabel = null; + + if (definition != null){ + languageFieldLabel = this.getSystemFieldLabel(definition, DmpBlueprintSystemFieldType.Language); + accessFieldLabel = this.getSystemFieldLabel(definition, DmpBlueprintSystemFieldType.AccessRights); + } + return Arrays.asList( this.spec() .iff(() -> this.isValidGuid(item.getId())) @@ -230,7 +239,7 @@ public class DmpPersist { this.spec() .iff(() -> item.getStatus() == DmpStatus.Finalized) .must(() -> this.isDescriptionTemplateMultiplicityValid(finalDmpBlueprintEntity, item.getId())) - .failOn(DmpPersist._descriptionTemplates).failWith(messageSource.getMessage("Validation.InvalidDescriptionTemplateMultiplicity", new Object[]{DmpPersist._descriptionTemplates}, LocaleContextHolder.getLocale())), + .failOn(DmpPersist._descriptionTemplates).failWith(messageSource.getMessage("Validation.InvalidDescriptionTemplateMultiplicityOnDMP", new Object[]{DmpPersist._descriptionTemplates}, LocaleContextHolder.getLocale())), this.refSpec() .iff(() -> !this.isNull(item.getProperties())) .on(DmpPersist._properties) @@ -239,11 +248,11 @@ public class DmpPersist { this.spec() .iff(() -> item.getStatus() == DmpStatus.Finalized) .must(() -> !this.isNull(item.getLanguage())) - .failOn(DmpPersist._language).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._language}, LocaleContextHolder.getLocale())), + .failOn(DmpPersist._language).failWith(messageSource.getMessage("Validation_Required", new Object[]{languageFieldLabel != null ? languageFieldLabel : DmpBlueprintSystemFieldType.Language.name()}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> item.getStatus() == DmpStatus.Finalized) .must(() -> !this.isNull(item.getAccessType())) - .failOn(DmpPersist._accessType).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._accessType}, LocaleContextHolder.getLocale())), + .failOn(DmpPersist._accessType).failWith(messageSource.getMessage("Validation_Required", new Object[]{accessFieldLabel != null ? accessFieldLabel : DmpBlueprintSystemFieldType.AccessRights.name()}, LocaleContextHolder.getLocale())), this.spec() .iff(() -> item.getStatus() == DmpStatus.Finalized) .must(() -> !this.isListNullOrEmpty(item.getDescriptionTemplates())) @@ -296,6 +305,28 @@ public class DmpPersist { } return true; } + + private String getSystemFieldLabel(DefinitionEntity definition, DmpBlueprintSystemFieldType type){ + if (this.isListNullOrEmpty(definition.getSections())) return null; + + for (SectionEntity section: definition.getSections()) { + if (!this.isListNullOrEmpty(section.getFields())) { + List fields = section.getFields().stream().filter(x -> x.getCategory().equals(DmpBlueprintFieldCategory.System)).collect(Collectors.toList()); + if (!this.isListNullOrEmpty(fields)){ + + List systemFields = (List)(List) fields; + if (!this.isListNullOrEmpty(systemFields)){ + List contactSystemFields = systemFields.stream().filter(x -> x.getType().equals(type) && x.isRequired()).collect(Collectors.toList()); + if(!this.isListNullOrEmpty(contactSystemFields)) { + return contactSystemFields.getFirst().getLabel() != null ? contactSystemFields.getFirst().getLabel() : type.name(); + } + } + + } + } + } + return null; + } } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpBlueprintValuePersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpBlueprintValuePersist.java index 394766a3d..e152aa951 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpBlueprintValuePersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpBlueprintValuePersist.java @@ -6,7 +6,6 @@ import eu.eudat.commons.types.dmpblueprint.DefinitionEntity; import eu.eudat.commons.types.dmpblueprint.FieldEntity; import eu.eudat.commons.types.dmpblueprint.ReferenceTypeFieldEntity; import eu.eudat.commons.validation.BaseValidator; -import eu.eudat.model.DmpDescriptionTemplate; import eu.eudat.model.ReferenceType; import eu.eudat.query.ReferenceTypeQuery; import gr.cite.tools.data.query.QueryFactory; @@ -101,7 +100,7 @@ public class DmpBlueprintValuePersist { .iff(() -> fieldEntity.getCategory().equals(DmpBlueprintFieldCategory.ReferenceType) && this.isEmpty(item.getFieldValue()) && required) .must(() -> !this.isListNullOrEmpty(item.getReferences())) // TODO: Cast Exception -// .failOn(DmpBlueprintValuePersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(fieldEntity.getLabel()) ? fieldEntity.getLabel() : this.getReferenceTypeName(((ReferenceTypeFieldEntity) fieldEntity).getReferenceTypeId())}, LocaleContextHolder.getLocale())), +// .failOn(DmpBlueprintValuePersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(fieldEntity.getLabel()) ? fieldEntity.getLabel() : this.getReferenceTypeName(fieldEntity)}, LocaleContextHolder.getLocale())), .failOn(DmpBlueprintValuePersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(fieldEntity.getLabel()) ? fieldEntity.getLabel() : DmpBlueprintValuePersist._references}, LocaleContextHolder.getLocale())), this.navSpec() .iff(() -> !this.isListNullOrEmpty(item.getReferences())) @@ -116,8 +115,11 @@ public class DmpBlueprintValuePersist { return this; } - private String getReferenceTypeName(UUID referenceTypeId){ - return this.queryFactory.query(ReferenceTypeQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(referenceTypeId).firstAs(new BaseFieldSet().ensure(ReferenceType._name)).getName(); + private String getReferenceTypeName(FieldEntity fieldEntity){ + if (fieldEntity instanceof ReferenceTypeFieldEntity) { + return this.queryFactory.query(ReferenceTypeQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(((ReferenceTypeFieldEntity)fieldEntity).getReferenceTypeId()).firstAs(new BaseFieldSet().ensure(ReferenceType._name)).getName(); + } + return ""; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpPropertiesPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpPropertiesPersist.java index 78835f8c4..bfaaa946c 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpPropertiesPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpPropertiesPersist.java @@ -1,7 +1,12 @@ package eu.eudat.model.persist.dmpproperties; +import eu.eudat.commons.enums.DmpBlueprintFieldCategory; +import eu.eudat.commons.enums.DmpBlueprintSystemFieldType; import eu.eudat.commons.enums.DmpStatus; import eu.eudat.commons.types.dmpblueprint.DefinitionEntity; +import eu.eudat.commons.types.dmpblueprint.FieldEntity; +import eu.eudat.commons.types.dmpblueprint.SectionEntity; +import eu.eudat.commons.types.dmpblueprint.SystemFieldEntity; import eu.eudat.commons.validation.BaseValidator; import gr.cite.tools.validation.ValidatorFactory; import gr.cite.tools.validation.specification.Specification; @@ -18,6 +23,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; public class DmpPropertiesPersist { @@ -70,6 +76,7 @@ public class DmpPropertiesPersist { @Override protected List specifications(DmpPropertiesPersist item) { + String contactField = this.getContactFieldLabel(); return Arrays.asList( this.mapSpec() .iff(() ->this.status == DmpStatus.Finalized && !this.isNull(item.getDmpBlueprintValues())) @@ -77,6 +84,10 @@ public class DmpPropertiesPersist { .over(item.getDmpBlueprintValues()) .mapKey((k) -> ((UUID)k).toString()) .using((itm) -> this.validatorFactory.validator(DmpBlueprintValuePersist.DmpBlueprintValuePersistValidator.class).withDefinition(definition)), + this.spec() + .iff(() -> this.status == DmpStatus.Finalized && contactField != null) + .must(() -> !this.isListNullOrEmpty(item.getContacts())) + .failOn(DmpPropertiesPersist._contacts).failWith(messageSource.getMessage("Validation_Required", new Object[]{contactField}, LocaleContextHolder.getLocale())), this.navSpec() .iff(() -> this.status == DmpStatus.Finalized && !this.isListNullOrEmpty(item.getContacts())) .on(DmpPropertiesPersist._contacts) @@ -96,6 +107,28 @@ public class DmpPropertiesPersist { return this; } + private String getContactFieldLabel(){ + if (this.isListNullOrEmpty(definition.getSections())) return null; + + for (SectionEntity section: definition.getSections()) { + if (!this.isListNullOrEmpty(section.getFields())) { + List fields = section.getFields().stream().filter(x -> x.getCategory().equals(DmpBlueprintFieldCategory.System)).collect(Collectors.toList()); + if (!this.isListNullOrEmpty(fields)){ + + List systemFields = (List)(List) fields; + if (!this.isListNullOrEmpty(systemFields)){ + List contactSystemFields = systemFields.stream().filter(x -> x.getType().equals(DmpBlueprintSystemFieldType.Contact) && x.isRequired()).collect(Collectors.toList()); + if(!this.isListNullOrEmpty(contactSystemFields)) { + return contactSystemFields.getFirst().getLabel() != null ? contactSystemFields.getFirst().getLabel() : DmpBlueprintSystemFieldType.Contact.name(); + } + } + + } + } + } + return null; + } + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java index 642ee889e..ae191ecd4 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java @@ -347,7 +347,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic data.setNumbering(persist.getNumbering()); data.setAdditionalInformation(persist.getAdditionalInformation()); data.setExtendedDescription(persist.getExtendedDescription()); - if (persist.getMultiplicity() != null) + if (persist.getMultiplicity() != null && persist.getMultiplicity().getMin() != 0 && persist.getMultiplicity().getMax() != 0) data.setMultiplicity(this.buildMultiplicityEntity(persist.getMultiplicity())); data.setHasCommentField(persist.getHasCommentField()); 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 d4a549a5a..24117204b 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 @@ -1053,9 +1053,8 @@ public class DmpServiceImpl implements DmpService { referencesFromAllFields = this.queryFactory.query(ReferenceQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(dmpReferenceEntities.stream().map(x-> x.getReferenceId()).collect(Collectors.toList())).isActive(IsActive.Active).collect(); } - + Map dmpBlueprintValues = new HashMap<>(); if (!this.conventionService.isListNullOrEmpty(sectionEntities)){ - Map dmpBlueprintValues = new HashMap<>(); for (SectionEntity sectionEntity: sectionEntities) { if (!this.conventionService.isListNullOrEmpty(sectionEntity.getFields())){ for (eu.eudat.commons.types.dmpblueprint.FieldEntity fieldEntity: sectionEntity.getFields()) { @@ -1072,17 +1071,19 @@ public class DmpServiceImpl implements DmpService { dmpBlueprintValues.put(fieldEntity.getId(), this.buildDmpBlueprintValuePersist(fieldEntity.getId(), null, referencePersists)); } } - } - if (!this.conventionService.isListNullOrEmpty(data.getDmpBlueprintValues())) { + } else if (!this.conventionService.isListNullOrEmpty(data.getDmpBlueprintValues())) { for (DmpBlueprintValueEntity value : data.getDmpBlueprintValues()) { if (value.getFieldId().equals(fieldEntity.getId())) { // found value dmpBlueprintValues.put(fieldEntity.getId(), this.buildDmpBlueprintValuePersist(fieldEntity.getId(), value.getValue(), null)); + } else { + dmpBlueprintValues.put(fieldEntity.getId(), this.buildDmpBlueprintValuePersist(fieldEntity.getId(), null, null)); } } } else { dmpBlueprintValues.put(fieldEntity.getId(), this.buildDmpBlueprintValuePersist(fieldEntity.getId(), null, null)); } + } } diff --git a/dmp-backend/web/src/main/resources/messages.properties b/dmp-backend/web/src/main/resources/messages.properties index 204587682..ec9508b6f 100644 --- a/dmp-backend/web/src/main/resources/messages.properties +++ b/dmp-backend/web/src/main/resources/messages.properties @@ -25,4 +25,5 @@ Validation.LowerThanMin= value must be equal or larger than {0} Validation.LessThenEqual= value {0} must be equal or less than {1} Validation.LargerThenEqual= value {0} must be equal or larger than {1} Validation.MissingFields= missing fields: {0} -Validation.InvalidDescriptionTemplateMultiplicity= {0} can not be used \ No newline at end of file +Validation.InvalidDescriptionTemplateMultiplicity= {0} can not be used +Validation.InvalidDescriptionTemplateMultiplicityOnDMP= Description Templates has multiplicity errors \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/admin/description-template/editor/description-template-editor.component.ts b/dmp-frontend/src/app/ui/admin/description-template/editor/description-template-editor.component.ts index 899cd8eef..dd5f6e7eb 100644 --- a/dmp-frontend/src/app/ui/admin/description-template/editor/description-template-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/description-template/editor/description-template-editor.component.ts @@ -204,6 +204,8 @@ export class DescriptionTemplateEditorComponent extends BaseEditor