From 49f3da1314f4e5141e0441d52d74d944531e7f0d Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Fri, 8 Mar 2024 18:36:16 +0200 Subject: [PATCH] file transformer changes --- .../EntityDoiCommonModelBuilder.java | 1 + .../commonmodels/TagCommonModelBuilder.java | 52 ++++++++++++ .../commonmodels/UserCommonModelBuilder.java | 46 +++++++++-- .../UserContactInfoCommonModelBuilder.java | 58 ++++++++++++++ .../DescriptionCommonModelBuilder.java | 1 + .../description/FieldCommonModelBuilder.java | 1 + .../dmp/DmpCommonModelBuilder.java | 2 + .../dmp/DmpContactCommonModelBuilder.java | 79 +++++++++++++++++++ .../dmp/DmpPropertiesCommonModelBuilder.java | 1 + dmp-backend/web/pom.xml | 4 +- 10 files changed, 236 insertions(+), 9 deletions(-) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/TagCommonModelBuilder.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/UserContactInfoCommonModelBuilder.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpContactCommonModelBuilder.java diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/EntityDoiCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/EntityDoiCommonModelBuilder.java index 5114bb5a6..cd88dd147 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/EntityDoiCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/EntityDoiCommonModelBuilder.java @@ -44,6 +44,7 @@ public class EntityDoiCommonModelBuilder extends BaseCommonModelBuilder(m, d)); } this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0)); diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/TagCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/TagCommonModelBuilder.java new file mode 100644 index 000000000..b2062b860 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/TagCommonModelBuilder.java @@ -0,0 +1,52 @@ +package eu.eudat.model.builder.commonmodels; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.commonmodels.models.TagModel; +import eu.eudat.convention.ConventionService; +import eu.eudat.data.TagEntity; +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 TagCommonModelBuilder extends BaseCommonModelBuilder { + + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + @Autowired + public TagCommonModelBuilder( + ConventionService conventionService) { + super(conventionService, new LoggerService(LoggerFactory.getLogger(TagCommonModelBuilder.class))); + } + + public TagCommonModelBuilder 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 (TagEntity d : data) { + TagModel m = new TagModel(); + m.setId(d.getId()); + m.setLabel(d.getLabel()); + 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/UserCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/UserCommonModelBuilder.java index 8ffcba7d8..abf7ff6cc 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/UserCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/UserCommonModelBuilder.java @@ -1,9 +1,21 @@ package eu.eudat.model.builder.commonmodels; import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.commonmodels.models.DmpUserModel; +import eu.eudat.commonmodels.models.UserContactInfoModel; import eu.eudat.commonmodels.models.UserModel; +import eu.eudat.commons.enums.IsActive; import eu.eudat.convention.ConventionService; +import eu.eudat.data.DmpEntity; +import eu.eudat.data.DmpUserEntity; +import eu.eudat.data.UserContactInfoEntity; import eu.eudat.data.UserEntity; +import eu.eudat.model.DmpUser; +import eu.eudat.model.UserContactInfo; +import eu.eudat.query.DmpUserQuery; +import eu.eudat.query.UserContactInfoQuery; +import gr.cite.tools.data.builder.BuilderFactory; +import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.exception.MyApplicationException; import gr.cite.tools.logging.LoggerService; import org.slf4j.LoggerFactory; @@ -12,20 +24,23 @@ 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; +import java.util.*; +import java.util.stream.Collectors; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class UserCommonModelBuilder extends BaseCommonModelBuilder { - private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + private final BuilderFactory builderFactory; + private final QueryFactory queryFactory; + private boolean disableContacts; @Autowired - public UserCommonModelBuilder(ConventionService conventionService) { + public UserCommonModelBuilder(ConventionService conventionService, BuilderFactory builderFactory, QueryFactory queryFactory) { super(conventionService, new LoggerService(LoggerFactory.getLogger(UserCommonModelBuilder.class))); + this.builderFactory = builderFactory; + this.queryFactory = queryFactory; } public UserCommonModelBuilder authorize(EnumSet values) { @@ -33,22 +48,39 @@ public class UserCommonModelBuilder extends BaseCommonModelBuilder> buildInternal(List data) throws MyApplicationException { this.logger.debug("building for {} items ", Optional.ofNullable(data).map(List::size).orElse(0)); if (data == null) return new ArrayList<>(); + Map> userContactInfoModelMap = this.disableContacts ? null : this.collectUserContactInfos(data); List> models = new ArrayList<>(); - for (UserEntity d : data) { UserModel m = new UserModel(); + m.setId(d.getId()); m.setName(d.getName()); models.add(new CommonModelBuilderItemResponse<>(m, d)); + if (userContactInfoModelMap != null && d.getId() != null && userContactInfoModelMap.containsKey(d.getId())) m.setContacts(userContactInfoModelMap.get(d.getId())); } this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0)); return models; } + private Map> collectUserContactInfos(List data) throws MyApplicationException { + this.logger.debug("checking related - {}", UserContactInfo.class.getSimpleName()); + + Map> itemMap; + UserContactInfoQuery query = this.queryFactory.query(UserContactInfoQuery.class).authorize(this.authorize).userIds(data.stream().map(UserEntity::getId).distinct().collect(Collectors.toList())); + itemMap = this.builderFactory.builder(UserContactInfoCommonModelBuilder.class).authorize(this.authorize).asMasterKey(query, UserContactInfoEntity::getUserId); + + return itemMap; + } + } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/UserContactInfoCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/UserContactInfoCommonModelBuilder.java new file mode 100644 index 000000000..ddf019a2d --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/UserContactInfoCommonModelBuilder.java @@ -0,0 +1,58 @@ +package eu.eudat.model.builder.commonmodels; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.commonmodels.enums.ContactInfoType; +import eu.eudat.commonmodels.models.UserContactInfoModel; +import eu.eudat.convention.ConventionService; +import eu.eudat.data.UserContactInfoEntity; +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 UserContactInfoCommonModelBuilder extends BaseCommonModelBuilder { + + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + @Autowired + public UserContactInfoCommonModelBuilder( + ConventionService conventionService) { + super(conventionService, new LoggerService(LoggerFactory.getLogger(UserContactInfoCommonModelBuilder.class))); + } + + public UserContactInfoCommonModelBuilder 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 (UserContactInfoEntity d : data) { + UserContactInfoModel m = new UserContactInfoModel(); + m.setId(d.getId()); + m.setCreatedAt(d.getCreatedAt()); + m.setValue(d.getValue()); + switch (d.getType()){ + case Email -> m.setType(ContactInfoType.Email); + default -> throw new MyApplicationException("unrecognized type " + d.getType()); + } + 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/DescriptionCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/DescriptionCommonModelBuilder.java index fbbdcd7d7..5ba604e1c 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/DescriptionCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/DescriptionCommonModelBuilder.java @@ -78,6 +78,7 @@ public class DescriptionCommonModelBuilder extends BaseCommonModelBuilder> models = new ArrayList<>(); for (DescriptionEntity d : data) { DescriptionModel m = new DescriptionModel(); + m.setId(d.getId()); m.setLabel(d.getLabel()); m.setDescription(d.getDescription()); switch (d.getStatus()){ diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/FieldCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/FieldCommonModelBuilder.java index 18e653be8..9414701ad 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/FieldCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/description/FieldCommonModelBuilder.java @@ -62,6 +62,7 @@ public class FieldCommonModelBuilder extends BaseCommonModelBuilder> models = new ArrayList<>(); for (FieldEntity d : data) { FieldModel m = new FieldModel(); + if (this.fieldEntity != null) m.setId(fieldEntity.getId()); if (FieldType.isDateType(fieldType)) m.setDateValue(d.getDateValue()); if (FieldType.isTextType(fieldType)) m.setTextValue(d.getTextValue()); if (FieldType.isTextListType(fieldType)) m.setTextListValue(d.getTextListValue()); diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpCommonModelBuilder.java index 48990d5bc..e1e4a0f3c 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpCommonModelBuilder.java @@ -115,6 +115,8 @@ public class DmpCommonModelBuilder extends BaseCommonModelBuilder m.setStatus(DmpStatus.Finalized); case Draft -> m.setStatus(DmpStatus.Draft); diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpContactCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpContactCommonModelBuilder.java new file mode 100644 index 000000000..0e160653d --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpContactCommonModelBuilder.java @@ -0,0 +1,79 @@ +package eu.eudat.model.builder.commonmodels.dmp; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.commonmodels.models.UserModel; +import eu.eudat.commonmodels.models.dmp.DmpContactModel; +import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.types.dmp.DmpContactEntity; +import eu.eudat.convention.ConventionService; +import eu.eudat.data.UserEntity; +import eu.eudat.model.builder.commonmodels.BaseCommonModelBuilder; +import eu.eudat.model.builder.commonmodels.CommonModelBuilderItemResponse; +import eu.eudat.model.builder.commonmodels.UserCommonModelBuilder; +import eu.eudat.query.UserQuery; +import gr.cite.tools.data.builder.BuilderFactory; +import gr.cite.tools.data.query.QueryFactory; +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.*; +import java.util.stream.Collectors; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class DmpContactCommonModelBuilder extends BaseCommonModelBuilder { + + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + private final BuilderFactory builderFactory; + + private final QueryFactory queryFactory; + + @Autowired + public DmpContactCommonModelBuilder( + ConventionService conventionService, BuilderFactory builderFactory, QueryFactory queryFactory) { + super(conventionService, new LoggerService(LoggerFactory.getLogger(DmpContactCommonModelBuilder.class))); + this.builderFactory = builderFactory; + this.queryFactory = queryFactory; + } + + public DmpContactCommonModelBuilder 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<>(); + + Map userItemsMap = this.collectUsers(data); + + List> models = new ArrayList<>(); + for (DmpContactEntity d : data) { + DmpContactModel m = new DmpContactModel(); + m.setEmail(d.getEmail()); + m.setFirstName(d.getFirstName()); + m.setLastName(d.getLastName()); + if (userItemsMap != null && d.getUserId() != null && userItemsMap.containsKey(d.getUserId())) m.setUser(userItemsMap.get(d.getUserId())); + models.add(new CommonModelBuilderItemResponse<>(m, d)); + } + this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0)); + return models; + } + + private Map collectUsers(List data) throws MyApplicationException { + if (data.isEmpty()) + return null; + this.logger.debug("checking related - {}", UserModel.class.getSimpleName()); + + Map itemMap; + UserQuery q = this.queryFactory.query(UserQuery.class).isActive(IsActive.Active).authorize(this.authorize).ids(data.stream().filter(x-> x.getUserId() != null).map(DmpContactEntity::getUserId).distinct().collect(Collectors.toList())); + itemMap = this.builderFactory.builder(UserCommonModelBuilder.class).disableContacts(true).authorize(this.authorize).asForeignKey(q, UserEntity::getId); + return itemMap; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpPropertiesCommonModelBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpPropertiesCommonModelBuilder.java index 962c09d45..5de5f0977 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpPropertiesCommonModelBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/commonmodels/dmp/DmpPropertiesCommonModelBuilder.java @@ -48,6 +48,7 @@ public class DmpPropertiesCommonModelBuilder extends BaseCommonModelBuilder(m, d)); } diff --git a/dmp-backend/web/pom.xml b/dmp-backend/web/pom.xml index 2c3246178..bef71f708 100644 --- a/dmp-backend/web/pom.xml +++ b/dmp-backend/web/pom.xml @@ -24,7 +24,7 @@ gr.cite.opendmp repositorydepositbase - 2.0.1 + 2.0.2 @@ -199,7 +199,7 @@ gr.cite.opendmp file-transformer-base - 0.0.4 + 0.0.5