From 9b30fb60d730e2e96bd80c1c9cfc5fcc0148d365 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Tue, 26 Mar 2024 16:30:13 +0200 Subject: [PATCH] common model changes --- dmp-backend/core/pom.xml | 4 +- ...riptionTemplateTypeCommonModelBuilder.java | 52 +++++++++++++++++++ ...onFieldSetItemModelCommonModelBuilder.java | 2 +- ...DescriptionTemplateCommonModelBuilder.java | 29 +++++++++-- .../ReferenceTypeDataCommonModelBuilder.java | 1 + .../visibility/VisibilityServiceImpl.java | 5 +- dmp-backend/web/pom.xml | 2 +- ...escriptionTemplateXmlMigrationService.java | 37 +++++++++---- 8 files changed, 112 insertions(+), 20 deletions(-) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/DescriptionTemplateTypeCommonModelBuilder.java diff --git a/dmp-backend/core/pom.xml b/dmp-backend/core/pom.xml index 7af53fb4c..9dcacf260 100644 --- a/dmp-backend/core/pom.xml +++ b/dmp-backend/core/pom.xml @@ -50,12 +50,12 @@ gr.cite.opendmp common-models - 0.0.5 + 0.0.7 gr.cite.opendmp file-transformer-base - 0.0.6 + 0.0.10 gr.cite diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/DescriptionTemplateTypeCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/DescriptionTemplateTypeCommonModelBuilder.java new file mode 100644 index 000000000..fddb513dd --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/DescriptionTemplateTypeCommonModelBuilder.java @@ -0,0 +1,52 @@ +package eu.eudat.model.builder.commonmodels; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.commonmodels.models.DescriptionTemplateTypeModel; +import eu.eudat.convention.ConventionService; +import eu.eudat.data.DescriptionTemplateTypeEntity; +import gr.cite.tools.exception.MyApplicationException; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.Optional; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class DescriptionTemplateTypeCommonModelBuilder extends BaseCommonModelBuilder { + + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + @Autowired + public DescriptionTemplateTypeCommonModelBuilder( + ConventionService conventionService) { + super(conventionService, new LoggerService(LoggerFactory.getLogger(DescriptionTemplateTypeCommonModelBuilder.class))); + } + + public DescriptionTemplateTypeCommonModelBuilder authorize(EnumSet values) { + this.authorize = values; + return this; + } + + @Override + protected List> buildInternal(List data) throws MyApplicationException { + this.logger.debug("building for {}", Optional.ofNullable(data).map(List::size).orElse(0)); + if (data == null || data.isEmpty()) return new ArrayList<>(); + + List> models = new ArrayList<>(); + for (DescriptionTemplateTypeEntity d : data) { + DescriptionTemplateTypeModel m = new DescriptionTemplateTypeModel(); + m.setId(d.getId()); + m.setName(d.getName()); + models.add(new CommonModelBuilderItemResponse<>(m, d)); + } + this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0)); + return models; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/PropertyDefinitionFieldSetItemModelCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/PropertyDefinitionFieldSetItemModelCommonModelBuilder.java index e8d7af56b..74eacfc87 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/PropertyDefinitionFieldSetItemModelCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/PropertyDefinitionFieldSetItemModelCommonModelBuilder.java @@ -66,7 +66,7 @@ public class PropertyDefinitionFieldSetItemModelCommonModelBuilder extends BaseC if (d.getFields() != null && !d.getFields().isEmpty()) { m.setFields(new HashMap<>()); for (String key : d.getFields().keySet()){ - FieldEntity fieldEntity = fieldSetEntity != null ? fieldSetEntity.getAllField().stream().findFirst().orElse(null) : null; + FieldEntity fieldEntity = fieldSetEntity != null ? fieldSetEntity.getFieldById(key).stream().findFirst().orElse(null) : null; m.getFields().put(key, this.builderFactory.builder(FieldCommonModelBuilder.class).useSharedStorage(useSharedStorage).authorize(this.authorize).withFieldEntity(fieldEntity).build(d.getFields().get(key))); } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/descriptiontemplate/DescriptionTemplateCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/descriptiontemplate/DescriptionTemplateCommonModelBuilder.java index 4350b8b76..80710a5e8 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/descriptiontemplate/DescriptionTemplateCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/descriptiontemplate/DescriptionTemplateCommonModelBuilder.java @@ -1,16 +1,17 @@ package eu.eudat.model.builder.commonmodels.descriptiontemplate; import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.commonmodels.models.DescriptionTemplateTypeModel; import eu.eudat.commonmodels.models.descriptiotemplate.DescriptionTemplateModel; -import eu.eudat.commons.JsonHandlingService; import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity; -import eu.eudat.commons.types.dmp.DmpPropertiesEntity; import eu.eudat.convention.ConventionService; import eu.eudat.data.DescriptionTemplateEntity; +import eu.eudat.data.DescriptionTemplateTypeEntity; import eu.eudat.model.builder.commonmodels.BaseCommonModelBuilder; import eu.eudat.model.builder.commonmodels.CommonModelBuilderItemResponse; -import eu.eudat.model.builder.commonmodels.dmp.DmpPropertiesCommonModelBuilder; +import eu.eudat.model.builder.commonmodels.DescriptionTemplateTypeCommonModelBuilder; +import eu.eudat.query.DescriptionTemplateTypeQuery; import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.exception.MyApplicationException; @@ -22,6 +23,7 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.util.*; +import java.util.stream.Collectors; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) @@ -31,12 +33,14 @@ public class DescriptionTemplateCommonModelBuilder extends BaseCommonModelBuilde private final XmlHandlingService xmlHandlingService; private final BuilderFactory builderFactory; + private final QueryFactory queryFactory; @Autowired public DescriptionTemplateCommonModelBuilder( - ConventionService conventionService, XmlHandlingService xmlHandlingService, BuilderFactory builderFactory) { + ConventionService conventionService, XmlHandlingService xmlHandlingService, BuilderFactory builderFactory, QueryFactory queryFactory) { super(conventionService, new LoggerService(LoggerFactory.getLogger(DescriptionTemplateCommonModelBuilder.class))); this.xmlHandlingService = xmlHandlingService; this.builderFactory = builderFactory; + this.queryFactory = queryFactory; } public DescriptionTemplateCommonModelBuilder authorize(EnumSet values) { @@ -49,6 +53,7 @@ public class DescriptionTemplateCommonModelBuilder extends BaseCommonModelBuilde this.logger.debug("building for {}", Optional.ofNullable(data).map(List::size).orElse(0)); if (data == null || data.isEmpty()) return new ArrayList<>(); + Map typeMap = this.collectDescriptionTemplateTypes(data); List> models = new ArrayList<>(); for (DescriptionTemplateEntity d : data) { DescriptionTemplateModel m = new DescriptionTemplateModel(); @@ -63,6 +68,7 @@ public class DescriptionTemplateCommonModelBuilder extends BaseCommonModelBuilde DefinitionEntity definition = this.xmlHandlingService.fromXmlSafe(DefinitionEntity.class, d.getDefinition()); m.setDefinition(this.builderFactory.builder(DefinitionCommonModelBuilder.class).authorize(this.authorize).build(definition)); } + if (typeMap != null && d.getTypeId() != null && typeMap.containsKey(d.getTypeId())) m.setType(typeMap.get(d.getTypeId())); models.add(new CommonModelBuilderItemResponse<>(m, d)); @@ -73,4 +79,19 @@ public class DescriptionTemplateCommonModelBuilder extends BaseCommonModelBuilde return models; } + + + + private Map collectDescriptionTemplateTypes(List data) throws MyApplicationException { + if (data.isEmpty()) + return null; + this.logger.debug("checking related - {}", DescriptionTemplateTypeModel.class.getSimpleName()); + + Map itemMap; + DescriptionTemplateTypeQuery q = this.queryFactory.query(DescriptionTemplateTypeQuery.class).authorize(this.authorize).ids(data.stream().map(DescriptionTemplateEntity::getTypeId).distinct().collect(Collectors.toList())); + itemMap = this.builderFactory.builder(DescriptionTemplateTypeCommonModelBuilder.class).authorize(this.authorize).asForeignKey(q, DescriptionTemplateTypeEntity::getId); + + return itemMap; + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/descriptiontemplate/fielddata/ReferenceTypeDataCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/descriptiontemplate/fielddata/ReferenceTypeDataCommonModelBuilder.java index a2e86e7d5..c4f14cebb 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/descriptiontemplate/fielddata/ReferenceTypeDataCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/descriptiontemplate/fielddata/ReferenceTypeDataCommonModelBuilder.java @@ -36,6 +36,7 @@ public class ReferenceTypeDataCommonModelBuilder extends BaseFieldDataCommonMode @Override protected void buildChild(ReferenceTypeDataEntity d, ReferenceTypeDataModel m) { + m.setMultipleSelect(d.getMultipleSelect()); if (d.getReferenceTypeId() != null) m.setReferenceType(this.builderFactory.builder(ReferenceTypeCommonModelBuilder.class).build(this.queryFactory.query(ReferenceTypeQuery.class).ids(d.getReferenceTypeId()).first())); //TODO: Optimize } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/visibility/VisibilityServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/visibility/VisibilityServiceImpl.java index 44d9bd58f..e1627afdd 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/visibility/VisibilityServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/visibility/VisibilityServiceImpl.java @@ -238,7 +238,7 @@ public class VisibilityServiceImpl implements VisibilityService { Boolean currentValue = this.visibility.getOrDefault(fieldKey, null); if (currentValue == null){ this.visibility.put(fieldKey, true); - this.setDefaultSectionVisibility(sectionEntity); + this.setDefaultSectionVisibility(subSectionEntity); } } } @@ -356,8 +356,7 @@ public class VisibilityServiceImpl implements VisibilityService { } else if (eu.eudat.commons.enums.FieldType.isTextListType(fieldType) && field.getTextListValue() != null && !field.getTextListValue().isEmpty()) { return rule.getTextListValue() != null && - new HashSet<>(field.getTextListValue()).containsAll(rule.getTextListValue()) && - new HashSet<>(rule.getTextListValue()).containsAll(field.getTextListValue()); + new HashSet<>(field.getTextListValue()).containsAll(rule.getTextListValue()); } else if (eu.eudat.commons.enums.FieldType.isReferenceType(fieldType)) { return rule.getTextListValue() != null && diff --git a/dmp-backend/web/pom.xml b/dmp-backend/web/pom.xml index b5a4fa0ef..481d5ba04 100644 --- a/dmp-backend/web/pom.xml +++ b/dmp-backend/web/pom.xml @@ -199,7 +199,7 @@ gr.cite.opendmp file-transformer-base - 0.0.6 + 0.0.10 diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DescriptionTemplateXmlMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DescriptionTemplateXmlMigrationService.java index 693d8d88d..aad362238 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DescriptionTemplateXmlMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DescriptionTemplateXmlMigrationService.java @@ -119,9 +119,10 @@ public class DescriptionTemplateXmlMigrationService { if (persist == null) return data; if (!this.conventionService.isListNullOrEmpty(persist.getPages())) { + Map> sectionPerPage = mapSectionsToPage(persist); data.setPages(new ArrayList<>()); for (Page pagePersist : persist.getPages()) { - data.getPages().add(this.buildPageEntity(pagePersist, persist.getSections(), referenceTypeEntityMap)); + data.getPages().add(this.buildPageEntity(pagePersist, sectionPerPage.get(pagePersist.getId()), referenceTypeEntityMap)); } } @@ -458,7 +459,7 @@ public class DescriptionTemplateXmlMigrationService { - private @NotNull PageEntity buildPageEntity(Page persist, List
allSections, Map referenceTypeEntityMap) throws URISyntaxException { + private @NotNull PageEntity buildPageEntity(Page persist, List
sections, Map referenceTypeEntityMap) throws URISyntaxException { PageEntity data = new PageEntity(); if (persist == null) return data; @@ -467,7 +468,6 @@ public class DescriptionTemplateXmlMigrationService { data.setOrdinal(persist.getOrdinal()); data.setTitle(persist.getTitle()); - List
sections = allSections.stream().filter(x-> this.isInPage(x, persist)).toList(); if (!this.conventionService.isListNullOrEmpty(sections)) { data.setSections(new ArrayList<>()); for (Section sectionPersist : sections) { @@ -477,16 +477,35 @@ public class DescriptionTemplateXmlMigrationService { return data; } + + private Map> mapSectionsToPage(ViewStyleModel persist){ + List mappedSectionsIds = new ArrayList<>(); + Map> sectionPerPage = new HashMap<>(); + if (persist == null || persist.getPages() == null || persist.getSections() == null) return sectionPerPage; + + for (Page page :persist.getPages()){ + sectionPerPage.put(page.getId(), new ArrayList<>()); + for (Section section : persist.getSections()){ + if (this.isInPage(section, page)){ + if (mappedSectionsIds.contains(section.getId())) throw new MyApplicationException("Multiple page section found for page " + page.getId() + " section " + section.getId()); + mappedSectionsIds.add(section.getId()); + sectionPerPage.get(page.getId()).add(section); + } + } + } + + for (Section section : persist.getSections()){ + if (!mappedSectionsIds.contains(section.getId())) throw new MyApplicationException("Orphan section found " + section.getId()); + } + + return sectionPerPage; + } + private boolean isInPage(Section section, Page page){ try { return UUID.fromString(section.getPage()).equals(UUID.fromString(page.getId())); } catch (Exception e){ - if (section.getPage().toLowerCase(Locale.ROOT).equals(page.getId().toLowerCase(Locale.ROOT))) return true; - try { - return Integer.parseInt(section.getPage().replace("page_", "")) == page.getOrdinal(); - } catch (Exception e1){ - return section.getPage().toLowerCase(Locale.ROOT).equals(page.getId().toLowerCase(Locale.ROOT)); - } + return section.getPage().toLowerCase(Locale.ROOT).equals(page.getId().toLowerCase(Locale.ROOT)); } }