diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/DescriptionEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/DescriptionEntity.java index 5f295a9ad..d9af6478a 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/DescriptionEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/DescriptionEntity.java @@ -31,21 +31,12 @@ public class DescriptionEntity implements DataEntity { public static final String _label = "label"; - @Column(name = "dmp", columnDefinition = "uuid", nullable = false) - private UUID dmpId; - - public static final String _dmpId = "dmpId"; @Column(name = "properties") private String properties; public static final String _properties = "properties"; - @Column(name = "description_template", columnDefinition = "uuid", nullable = false) - private UUID descriptionTemplateId; - - public static final String _descriptionTemplateId = "descriptionTemplateId"; - @Column(name = "status", nullable = false) @Convert(converter = DescriptionStatusConverter.class) private DescriptionStatus status; @@ -105,14 +96,6 @@ public class DescriptionEntity implements DataEntity { this.label = label; } - public UUID getDmpId() { - return dmpId; - } - - public void setDmpId(UUID dmpId) { - this.dmpId = dmpId; - } - public String getProperties() { return properties; } @@ -120,15 +103,7 @@ public class DescriptionEntity implements DataEntity { public void setProperties(String properties) { this.properties = properties; } - - public UUID getDescriptionTemplateId() { - return descriptionTemplateId; - } - - public void setDescriptionTemplateId(UUID descriptionTemplateId) { - this.descriptionTemplateId = descriptionTemplateId; - } - + public DescriptionStatus getStatus() { return status; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/DmpDescriptionTemplateEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/DmpDescriptionTemplateEntity.java index 72504384b..158c57bcd 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/DmpDescriptionTemplateEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/DmpDescriptionTemplateEntity.java @@ -20,14 +20,14 @@ public class DmpDescriptionTemplateEntity { public static final String _id = "id"; @Column(name = "dmp", columnDefinition = "uuid", nullable = false) - private UUID dmp; + private UUID dmpId; - public static final String _dmp = "dmp"; + public static final String _dmpId = "dmpId"; @Column(name = "description_template", columnDefinition = "uuid", nullable = false) - private UUID descriptionTemplate; + private UUID descriptionTemplateId; - public static final String _descriptionTemplate = "descriptionTemplate"; + public static final String _descriptionTemplateId = "descriptionTemplateId"; @Column(name = "section_id") private UUID sectionId; @@ -58,20 +58,20 @@ public class DmpDescriptionTemplateEntity { this.id = id; } - public UUID getDmp() { - return dmp; + public UUID getDmpId() { + return dmpId; } - public void setDmp(UUID dmp) { - this.dmp = dmp; + public void setDmpId(UUID dmpId) { + this.dmpId = dmpId; } - public UUID getDescriptionTemplate() { - return descriptionTemplate; + public UUID getDescriptionTemplateId() { + return descriptionTemplateId; } - public void setDescriptionTemplate(UUID descriptionTemplate) { - this.descriptionTemplate = descriptionTemplate; + public void setDescriptionTemplateId(UUID descriptionTemplateId) { + this.descriptionTemplateId = descriptionTemplateId; } public UUID getSectionId() { diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/Description.java b/dmp-backend/core/src/main/java/eu/eudat/model/Description.java index 1a1c6f38a..aafc827c3 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/Description.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/Description.java @@ -18,17 +18,10 @@ public class Description { public static final String _label = "label"; - private Dmp dmp; - - public static final String _dmp = "dmp"; - private PropertyDefinition properties; public static final String _properties = "properties"; - private DescriptionTemplate descriptionTemplate; - - public static final String _descriptionTemplate = "descriptionTemplate"; private DescriptionStatus status; @@ -90,13 +83,6 @@ public class Description { this.label = label; } - public Dmp getDmp() { - return dmp; - } - - public void setDmp(Dmp dmp) { - this.dmp = dmp; - } public PropertyDefinition getProperties() { return properties; @@ -170,14 +156,6 @@ public class Description { this.descriptionReferences = descriptionReferences; } - public DescriptionTemplate getDescriptionTemplate() { - return descriptionTemplate; - } - - public void setDescriptionTemplate(DescriptionTemplate descriptionTemplate) { - this.descriptionTemplate = descriptionTemplate; - } - public Instant getCreatedAt() { return createdAt; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionBuilder.java index 7470b2024..698a66720 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionBuilder.java @@ -59,12 +59,6 @@ public class DescriptionBuilder extends BaseBuilder(); - FieldSet dmpFields = fields.extractPrefixed(this.asPrefix(Description._dmp)); - Map dmpItemsMap = this.collectDmps(dmpFields, data); - - FieldSet descriptionTemplateFields = fields.extractPrefixed(this.asPrefix(Description._descriptionTemplate)); - Map descriptionTemplateItemsMap = this.collectDescriptionTemplates(descriptionTemplateFields, data); - FieldSet dmpDescriptionTemplateFields = fields.extractPrefixed(this.asPrefix(Description._dmpDescriptionTemplate)); Map dmpDescriptionTemplateItemsMap = this.collectDmpDescriptionTemplates(dmpDescriptionTemplateFields, data); @@ -88,9 +82,7 @@ public class DescriptionBuilder extends BaseBuilder collectDmps(FieldSet fields, List data) throws MyApplicationException { - if (fields.isEmpty() || data.isEmpty()) - return null; - this.logger.debug("checking related - {}", Dmp.class.getSimpleName()); - - Map itemMap; - if (!fields.hasOtherField(this.asIndexer(Dmp._id))) { - itemMap = this.asEmpty( - data.stream().map(DescriptionEntity::getDmpId).distinct().collect(Collectors.toList()), - x -> { - Dmp item = new Dmp(); - item.setId(x); - return item; - }, - Dmp::getId); - } else { - FieldSet clone = new BaseFieldSet(fields.getFields()).ensure(Dmp._id); - DmpQuery q = this.queryFactory.query(DmpQuery.class).authorize(this.authorize).ids(data.stream().map(DescriptionEntity::getDmpId).distinct().collect(Collectors.toList())); - itemMap = this.builderFactory.builder(DmpBuilder.class).authorize(this.authorize).asForeignKey(q, clone, Dmp::getId); - } - if (!fields.hasField(Dmp._id)) { - itemMap.forEach((id, item) -> { - if (item != null) - item.setId(null); - }); - } - - return itemMap; - } - - private Map collectDescriptionTemplates(FieldSet fields, List data) throws MyApplicationException { - if (fields.isEmpty() || data.isEmpty()) - return null; - this.logger.debug("checking related - {}", DescriptionTemplate.class.getSimpleName()); - - Map itemMap; - if (!fields.hasOtherField(this.asIndexer(DescriptionTemplate._id))) { - itemMap = this.asEmpty( - data.stream().map(DescriptionEntity::getDescriptionTemplateId).distinct().collect(Collectors.toList()), - x -> { - DescriptionTemplate item = new DescriptionTemplate(); - item.setId(x); - return item; - }, - DescriptionTemplate::getId); - } else { - FieldSet clone = new BaseFieldSet(fields.getFields()).ensure(DescriptionTemplate._id); - DescriptionTemplateQuery q = this.queryFactory.query(DescriptionTemplateQuery.class).authorize(this.authorize).ids(data.stream().map(DescriptionEntity::getDescriptionTemplateId).distinct().collect(Collectors.toList())); - itemMap = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(this.authorize).asForeignKey(q, clone, DescriptionTemplate::getId); - } - if (!fields.hasField(DescriptionTemplate._id)) { - itemMap.forEach((id, item) -> { - if (item != null) - item.setId(null); - }); - } - - return itemMap; - } - private Map collectDmpDescriptionTemplates(FieldSet fields, List data) throws MyApplicationException { if (fields.isEmpty() || data.isEmpty()) return null; diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpBuilder.java index 2a33e37f1..d0a37300f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpBuilder.java @@ -55,9 +55,6 @@ public class DmpBuilder extends BaseBuilder { List models = new ArrayList<>(); - FieldSet dmpDescriptionsFields = fields.extractPrefixed(this.asPrefix(Dmp._dmpDescriptions)); - Map> dmpDescriptionsMap = this.collectDmpDescriptions(dmpDescriptionsFields, data); - FieldSet dmpReferencesFields = fields.extractPrefixed(this.asPrefix(Reference._dmpReferences)); Map> dmpReferenceMap = this.collectDmpReferences(dmpReferencesFields, data); @@ -96,9 +93,6 @@ public class DmpBuilder extends BaseBuilder { if (fields.hasField(this.asIndexer(Dmp._hash))) m.setHash(this.hashValue(d.getUpdatedAt())); - if (!dmpDescriptionsFields.isEmpty() && dmpDescriptionsMap != null && dmpDescriptionsMap.containsKey(d.getId())) - m.setDmpDescriptions(dmpDescriptionsMap.get(d.getId())); - if (dmpReferenceMap != null && !dmpReferenceMap.isEmpty() && dmpReferenceMap.containsKey(d.getId())) m.setDmpReferences(dmpReferenceMap.get(d.getId())); @@ -109,27 +103,6 @@ public class DmpBuilder extends BaseBuilder { return models; } - private Map> collectDmpDescriptions(FieldSet fields, List data) throws MyApplicationException { - if (fields.isEmpty() || data.isEmpty()) - return null; - this.logger.debug("checking related - {}", Description.class.getSimpleName()); - - Map> itemMap; - FieldSet clone = new BaseFieldSet(fields.getFields()).ensure(this.asIndexer(Description._dmp, Dmp._id)); - DescriptionQuery query = this.queryFactory.query(DescriptionQuery.class).authorize(this.authorize).dmpIds(data.stream().map(DmpEntity::getId).distinct().collect(Collectors.toList())); - itemMap = this.builderFactory.builder(DescriptionBuilder.class).authorize(this.authorize).asMasterKey(query, clone, x -> x.getDmp().getId()); - - if (!fields.hasField(this.asIndexer(Description._dmp, Dmp._id))) { - itemMap.forEach((id, dmps) -> { - dmps.forEach(description -> { - if (description != null && description.getDmp() != null) - description.getDmp().setId(null); - }); - }); - } - return itemMap; - } - private Map> collectDmpReferences(FieldSet fields, List datas) throws MyApplicationException { if (fields.isEmpty() || datas.isEmpty()) return null; this.logger.debug("checking related - {}", DmpReference.class.getSimpleName()); diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpDescriptionTemplateBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpDescriptionTemplateBuilder.java index 9fae0e9a5..fdae05e29 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpDescriptionTemplateBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpDescriptionTemplateBuilder.java @@ -3,11 +3,9 @@ package eu.eudat.model.builder; import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.convention.ConventionService; import eu.eudat.data.DmpDescriptionTemplateEntity; -import eu.eudat.data.DmpReferenceEntity; import eu.eudat.model.*; import eu.eudat.query.DescriptionTemplateQuery; import eu.eudat.query.DmpQuery; -import eu.eudat.query.ReferenceQuery; import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.exception.MyApplicationException; @@ -72,11 +70,11 @@ public class DmpDescriptionTemplateBuilder extends BaseBuilder itemMap; if (!fields.hasOtherField(this.asIndexer(DescriptionTemplate._id))) { itemMap = this.asEmpty( - data.stream().map(DmpDescriptionTemplateEntity::getDescriptionTemplate).distinct().collect(Collectors.toList()), + data.stream().map(DmpDescriptionTemplateEntity::getDescriptionTemplateId).distinct().collect(Collectors.toList()), x -> { DescriptionTemplate item = new DescriptionTemplate(); item.setId(x); @@ -101,7 +99,7 @@ public class DmpDescriptionTemplateBuilder extends BaseBuilder itemMap; if (!fields.hasOtherField(this.asIndexer(Dmp._id))) { itemMap = this.asEmpty( - data.stream().map(DmpDescriptionTemplateEntity::getDmp).distinct().collect(Collectors.toList()), + data.stream().map(DmpDescriptionTemplateEntity::getDmpId).distinct().collect(Collectors.toList()), x -> { Dmp item = new Dmp(); item.setId(x); @@ -128,7 +126,7 @@ public class DmpDescriptionTemplateBuilder extends BaseBuilder getDescriptions(UUID dmpId) { - DescriptionQuery descriptionQuery = this.applicationContext.getBean(DescriptionQuery.class); - return descriptionQuery.dmpIds(dmpId).isActive(IsActive.Active).collect(); + DescriptionQuery descriptionQuery = this.queryFactory.query(DescriptionQuery.class); + return descriptionQuery.dmpDescriptionTemplateSubQuery(this.queryFactory.query(DmpDescriptionTemplateQuery.class).dmpIds(dmpId).isActive(IsActive.Active)).isActive(IsActive.Active).collect(); } @@ -72,15 +76,16 @@ public class DmpEntityDepositMapper { model.setLabel(entity.getLabel()); model.setDescription(entity.getDescription()); model.setProperties(entity.getProperties()); - DescriptionTemplateEntity descriptionTemplateEntity = getDescriptionTemplate(entity.getDescriptionTemplateId()); + DescriptionTemplateEntity descriptionTemplateEntity = getDescriptionTemplate(entity.getDmpDescriptionTemplateId()); model.setProfileDefinition(descriptionTemplateEntity.getDefinition()); model.setFields(fromDefinitionAndProperties(descriptionTemplateEntity.getDefinition(), entity.getProperties())); return model; } - private DescriptionTemplateEntity getDescriptionTemplate(UUID descId) { - DescriptionTemplateQuery descriptionTemplateQuery = this.applicationContext.getBean(DescriptionTemplateQuery.class); - return descriptionTemplateQuery.ids(descId).isActive(IsActive.Active).first(); + private DescriptionTemplateEntity getDescriptionTemplate(UUID dmpDescriptionTemplateId) { + DmpDescriptionTemplateEntity dmpDescriptionTemplate = this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(dmpDescriptionTemplateId).isActive(IsActive.Active).first(); + DescriptionTemplateQuery descriptionTemplateQuery = this.queryFactory.query(DescriptionTemplateQuery.class); + return descriptionTemplateQuery.ids(dmpDescriptionTemplate.getDescriptionTemplateId()).isActive(IsActive.Active).first(); } private List fromDefinitionAndProperties(String definition, String properties){ diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionQuery.java index 0fceba7e6..d4d9b806a 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionQuery.java @@ -4,6 +4,8 @@ import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.commons.enums.DescriptionStatus; import eu.eudat.commons.enums.IsActive; import eu.eudat.data.DescriptionEntity; +import eu.eudat.data.DescriptionTemplateEntity; +import eu.eudat.data.DmpDescriptionTemplateEntity; import eu.eudat.model.Description; import gr.cite.tools.data.query.FieldResolver; import gr.cite.tools.data.query.QueryBase; @@ -11,6 +13,7 @@ import gr.cite.tools.data.query.QueryContext; import jakarta.persistence.Tuple; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Subquery; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -25,6 +28,8 @@ public class DescriptionQuery extends QueryBase { private String like; private Collection ids; + private Collection dmpDescriptionTemplateIds; + private DmpDescriptionTemplateQuery dmpDescriptionTemplateQuery; private Collection excludedIds; @@ -32,8 +37,6 @@ public class DescriptionQuery extends QueryBase { private Collection statuses; - private Collection dmpIds; - private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); @@ -60,6 +63,13 @@ public class DescriptionQuery extends QueryBase { return this; } + + + public DescriptionQuery dmpDescriptionTemplateSubQuery(DmpDescriptionTemplateQuery subQuery) { + this.dmpDescriptionTemplateQuery = subQuery; + return this; + } + public DescriptionQuery excludedIds(Collection values) { this.excludedIds = values; return this; @@ -105,21 +115,6 @@ public class DescriptionQuery extends QueryBase { return this; } - public DescriptionQuery dmpIds(UUID value) { - this.dmpIds = List.of(value); - return this; - } - - public DescriptionQuery dmpIds(UUID... value) { - this.dmpIds = Arrays.asList(value); - return this; - } - - public DescriptionQuery dmpIds(Collection values) { - this.dmpIds = values; - return this; - } - public DescriptionQuery authorize(EnumSet values) { this.authorize = values; return this; @@ -131,8 +126,7 @@ public class DescriptionQuery extends QueryBase { this.isEmpty(this.ids) || this.isEmpty(this.isActives) || this.isEmpty(this.excludedIds) || - this.isEmpty(this.statuses) || - this.isEmpty(this.dmpIds); + this.isEmpty(this.statuses) || this.isFalseQuery(this.dmpDescriptionTemplateQuery); } @Override @@ -144,7 +138,10 @@ public class DescriptionQuery extends QueryBase { protected Predicate applyFilters(QueryContext queryContext) { List predicates = new ArrayList<>(); if (this.like != null && !this.like.isEmpty()) { - predicates.add(queryContext.CriteriaBuilder.like(queryContext.Root.get(DescriptionEntity._label), this.like)); + predicates.add(queryContext.CriteriaBuilder.or( + queryContext.CriteriaBuilder.like(queryContext.Root.get(DescriptionEntity._description), this.like), + queryContext.CriteriaBuilder.like(queryContext.Root.get(DescriptionEntity._label), this.like) + )); } if (this.ids != null) { CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._id)); @@ -170,11 +167,10 @@ public class DescriptionQuery extends QueryBase { inClause.value(item); predicates.add(inClause); } - if (this.dmpIds != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._dmpId)); - for (UUID item : this.dmpIds) - inClause.value(item); - predicates.add(inClause); + if (this.dmpDescriptionTemplateQuery != null) { + Subquery subQuery = queryContext.Query.subquery(this.dmpDescriptionTemplateQuery.entityClass()); + this.applySubQuery(this.dmpDescriptionTemplateQuery, queryContext.CriteriaBuilder, subQuery); + predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._dmpDescriptionTemplateId)).value(subQuery)); } if (!predicates.isEmpty()) { Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); @@ -188,10 +184,7 @@ public class DescriptionQuery extends QueryBase { protected String fieldNameOf(FieldResolver item) { if (item.match(Description._id)) return DescriptionEntity._id; else if (item.match(Description._label)) return DescriptionEntity._label; - else if (item.prefix(Description._dmp)) return DescriptionEntity._dmpId; - else if (item.match(Description._dmp)) return DescriptionEntity._dmpId; else if (item.prefix(Description._properties)) return DescriptionEntity._properties; - else if (item.prefix(Description._descriptionTemplate)) return DescriptionEntity._descriptionTemplateId; else if (item.match(Description._status)) return DescriptionEntity._status; else if (item.match(Description._description)) return DescriptionEntity._description; else if (item.match(Description._createdBy)) return DescriptionEntity._createdById; @@ -208,9 +201,7 @@ public class DescriptionQuery extends QueryBase { DescriptionEntity item = new DescriptionEntity(); item.setId(QueryBase.convertSafe(tuple, columns, DescriptionEntity._id, UUID.class)); item.setLabel(QueryBase.convertSafe(tuple, columns, DescriptionEntity._label, String.class)); - item.setDmpId(QueryBase.convertSafe(tuple, columns, DescriptionEntity._dmpId, UUID.class)); item.setProperties(QueryBase.convertSafe(tuple, columns, DescriptionEntity._properties, String.class)); - item.setDescriptionTemplateId(QueryBase.convertSafe(tuple, columns, DescriptionEntity._descriptionTemplateId, UUID.class)); item.setStatus(QueryBase.convertSafe(tuple, columns, DescriptionEntity._status, DescriptionStatus.class)); item.setDescription(QueryBase.convertSafe(tuple, columns, DescriptionEntity._description, String.class)); item.setCreatedAt(QueryBase.convertSafe(tuple, columns, DescriptionEntity._createdAt, Instant.class)); diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DmpDescriptionTemplateQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DmpDescriptionTemplateQuery.java index 52ee85aed..ce457fb1e 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DmpDescriptionTemplateQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DmpDescriptionTemplateQuery.java @@ -1,12 +1,10 @@ package eu.eudat.query; import eu.eudat.authorization.AuthorizationFlags; -import eu.eudat.commons.scope.user.UserScope; +import eu.eudat.commons.enums.IsActive; +import eu.eudat.data.DescriptionEntity; import eu.eudat.data.DmpDescriptionTemplateEntity; -import eu.eudat.data.DmpReferenceEntity; import eu.eudat.model.DmpDescriptionTemplate; -import eu.eudat.model.DmpReference; -import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.query.FieldResolver; import gr.cite.tools.data.query.QueryBase; import gr.cite.tools.data.query.QueryContext; @@ -30,6 +28,10 @@ public class DmpDescriptionTemplateQuery extends QueryBase descriptionTemplateIds; + private Collection isActives; + + private Collection excludedIds; + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); @@ -48,6 +50,36 @@ public class DmpDescriptionTemplateQuery extends QueryBase values) { + this.excludedIds = values; + return this; + } + + public DmpDescriptionTemplateQuery excludedIds(UUID value) { + this.excludedIds = List.of(value); + return this; + } + + public DmpDescriptionTemplateQuery excludedIds(UUID... value) { + this.excludedIds = Arrays.asList(value); + return this; + } + + public DmpDescriptionTemplateQuery isActive(IsActive value) { + this.isActives = List.of(value); + return this; + } + + public DmpDescriptionTemplateQuery isActive(IsActive... value) { + this.isActives = Arrays.asList(value); + return this; + } + + public DmpDescriptionTemplateQuery isActive(Collection values) { + this.isActives = values; + return this; + } + public DmpDescriptionTemplateQuery dmpIds(UUID value) { this.dmpIds = List.of(value); return this; @@ -94,7 +126,7 @@ public class DmpDescriptionTemplateQuery extends QueryBase notInClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._id)); + for (UUID item : this.excludedIds) + notInClause.value(item); + predicates.add(notInClause.not()); + } if (this.dmpIds != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DmpDescriptionTemplateEntity._dmp)); + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DmpDescriptionTemplateEntity._dmpId)); for (UUID item : this.dmpIds) inClause.value(item); predicates.add(inClause); } if (this.descriptionTemplateIds != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DmpDescriptionTemplateEntity._descriptionTemplate)); + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DmpDescriptionTemplateEntity._descriptionTemplateId)); for (UUID item : this.descriptionTemplateIds) inClause.value(item); predicates.add(inClause); } + if (this.isActives != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DmpDescriptionTemplateEntity._isActive)); + for (IsActive item : this.isActives) + inClause.value(item); + predicates.add(inClause); + } if (!predicates.isEmpty()) { Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); return queryContext.CriteriaBuilder.and(predicatesArray); @@ -130,8 +174,8 @@ public class DmpDescriptionTemplateQuery extends QueryBase columns) { DmpDescriptionTemplateEntity item = new DmpDescriptionTemplateEntity(); item.setId(QueryBase.convertSafe(tuple, columns, DmpDescriptionTemplateEntity._id, UUID.class)); - item.setDmp(QueryBase.convertSafe(tuple, columns, DmpDescriptionTemplateEntity._dmp, UUID.class)); - item.setDescriptionTemplate(QueryBase.convertSafe(tuple, columns, DmpDescriptionTemplateEntity._descriptionTemplate, UUID.class)); + item.setDmpId(QueryBase.convertSafe(tuple, columns, DmpDescriptionTemplateEntity._dmpId, UUID.class)); + item.setDescriptionTemplateId(QueryBase.convertSafe(tuple, columns, DmpDescriptionTemplateEntity._descriptionTemplateId, UUID.class)); item.setSectionId(QueryBase.convertSafe(tuple, columns, DmpDescriptionTemplateEntity._sectionId, UUID.class)); item.setCreatedAt(QueryBase.convertSafe(tuple, columns, DmpDescriptionTemplateEntity._createdAt, Instant.class)); item.setUpdatedAt(QueryBase.convertSafe(tuple, columns, DmpDescriptionTemplateEntity._updatedAt, Instant.class)); @@ -141,8 +185,8 @@ public class DmpDescriptionTemplateQuery extends QueryBase excludedIds; + private DmpDescriptionTemplateLookup dmpDescriptionTemplateSubQuery; + private List isActive; private List statuses; - private List dmpIds; - public String getLike() { return like; } @@ -64,12 +63,12 @@ public class DescriptionLookup extends Lookup { this.statuses = statuses; } - public List getDmpIds() { - return dmpIds; + public DmpDescriptionTemplateLookup getDmpDescriptionTemplateSubQuery() { + return dmpDescriptionTemplateSubQuery; } - public void setDmpIds(List dmpIds) { - this.dmpIds = dmpIds; + public void setDmpDescriptionTemplateSubQuery(DmpDescriptionTemplateLookup dmpDescriptionTemplateSubQuery) { + this.dmpDescriptionTemplateSubQuery = dmpDescriptionTemplateSubQuery; } public DescriptionQuery enrich(QueryFactory queryFactory) { @@ -77,9 +76,9 @@ public class DescriptionLookup extends Lookup { if (this.like != null) query.like(this.like); if (this.ids != null) query.ids(this.ids); if (this.excludedIds != null) query.excludedIds(this.excludedIds); + if (this.dmpDescriptionTemplateSubQuery != null) query.dmpDescriptionTemplateSubQuery(this.dmpDescriptionTemplateSubQuery.enrich(queryFactory)); if (this.isActive != null) query.isActive(this.isActive); if (this.statuses != null) query.statuses(this.statuses); - if (this.dmpIds != null) query.dmpIds(this.dmpIds); this.enrichCommon(query); diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DmpDescriptionTemplateLookup.java b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DmpDescriptionTemplateLookup.java new file mode 100644 index 000000000..637315f31 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DmpDescriptionTemplateLookup.java @@ -0,0 +1,76 @@ +package eu.eudat.query.lookup; + +import eu.eudat.commons.enums.DescriptionStatus; +import eu.eudat.commons.enums.IsActive; +import eu.eudat.query.DescriptionQuery; +import eu.eudat.query.DmpDescriptionTemplateQuery; +import gr.cite.tools.data.query.Lookup; +import gr.cite.tools.data.query.QueryFactory; + +import java.util.List; +import java.util.UUID; + +public class DmpDescriptionTemplateLookup extends Lookup { + + private List ids; + private List dmpIds; + private List descriptionTemplateIds; + + private List excludedIds; + + private List isActive; + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + public List getExcludedIds() { + return excludedIds; + } + + public void setExcludedIds(List excludedIds) { + this.excludedIds = excludedIds; + } + + public List getIsActive() { + return isActive; + } + + public void setIsActive(List isActive) { + this.isActive = isActive; + } + + public List getDmpIds() { + return dmpIds; + } + + public void setDmpIds(List dmpIds) { + this.dmpIds = dmpIds; + } + + public List getDescriptionTemplateIds() { + return descriptionTemplateIds; + } + + public void setDescriptionTemplateIds(List descriptionTemplateIds) { + this.descriptionTemplateIds = descriptionTemplateIds; + } + + public DmpDescriptionTemplateQuery enrich(QueryFactory queryFactory) { + DmpDescriptionTemplateQuery query = queryFactory.query(DmpDescriptionTemplateQuery.class); + if (this.ids != null) query.ids(this.ids); + if (this.dmpIds != null) query.ids(this.dmpIds); + if (this.descriptionTemplateIds != null) query.ids(this.descriptionTemplateIds); + if (this.excludedIds != null) query.excludedIds(this.excludedIds); + if (this.isActive != null) query.isActive(this.isActive); + + this.enrichCommon(query); + + return query; + } + +} 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 89c6ef6c4..29359604e 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 @@ -107,9 +107,7 @@ public class DescriptionServiceImpl implements DescriptionService { } data.setLabel(model.getLabel()); - data.setDmpId(model.getDmp()); data.setProperties(model.getProperties()); - data.setDescriptionTemplateId(model.getProfile()); data.setStatus(model.getStatus()); data.setDescription(model.getDescription()); data.setUpdatedAt(Instant.now()); 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 4d24b0fab..fe7850b6a 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 @@ -19,7 +19,6 @@ import eu.eudat.model.builder.DmpBuilder; import eu.eudat.model.deleter.DmpDeleter; import eu.eudat.model.deleter.DmpDescriptionTemplateDeleter; import eu.eudat.model.deleter.DmpReferenceDeleter; -import eu.eudat.model.deleter.ReferenceDeleter; import eu.eudat.model.persist.DmpDescriptionTemplatePersist; import eu.eudat.model.persist.DmpPersist; import eu.eudat.model.persist.DmpReferencePersist; @@ -274,7 +273,7 @@ public class DmpServiceImpl implements DmpService { return; List templates = this.queryFactory.query(DmpDescriptionTemplateQuery.class).dmpIds(dmpId).collect(); - Map> templatesLookup = this.conventionService.toDictionaryOfList(templates, DmpDescriptionTemplateEntity::getDmp); + Map> templatesLookup = this.conventionService.toDictionaryOfList(templates, DmpDescriptionTemplateEntity::getDmpId); List existingTemplates; if (templatesLookup.containsKey(dmpId)) @@ -291,8 +290,8 @@ public class DmpServiceImpl implements DmpService { if (shouldAdd) { DmpDescriptionTemplateEntity dmpTemplate = new DmpDescriptionTemplateEntity(); - dmpTemplate.setDescriptionTemplate(model.getDescriptionTemplate()); - dmpTemplate.setDmp(dmpId); + dmpTemplate.setDescriptionTemplateId(model.getDescriptionTemplate()); + dmpTemplate.setDmpId(dmpId); dmpTemplate.setSectionId(model.getSectionId()); dmpTemplate.setCreatedAt(Instant.now()); dmpTemplate.setUpdatedAt(Instant.now()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java index 7d63d122c..3e8f63c62 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java @@ -4,7 +4,6 @@ import eu.eudat.authorization.Permission; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.data.DescriptionEntity; import eu.eudat.data.DescriptionTemplateEntity; -import eu.eudat.data.query.items.item.dataset.DatasetWizardAutocompleteRequest; import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileWizardAutocompleteRequest; import eu.eudat.data.query.items.table.dataset.DatasetPublicTableRequest; import eu.eudat.data.query.items.table.dataset.DatasetTableRequest; @@ -23,7 +22,6 @@ import eu.eudat.model.file.FileEnvelope; import eu.eudat.utilities.pdf.PDFUtils; import eu.eudat.models.data.dataset.DatasetOverviewModel; import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; -import eu.eudat.models.data.datasetwizard.DataManagentPlanListingModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dmp.AssociatedProfile; import eu.eudat.models.data.helpers.common.DataTableData; @@ -33,6 +31,7 @@ import eu.eudat.models.data.listingmodels.DatasetListingModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import eu.eudat.types.ApiMessageCode; import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.query.QueryFactory; import org.apache.poi.util.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,10 +71,11 @@ public class Datasets extends BaseController { private FileManager fileManager; private final AuthorizationService authorizationService; private final UserScope userScope; + private final QueryFactory queryFactory; @Autowired public Datasets(ApiContext apiContext, Environment environment, DatasetManager datasetManager, ConfigLoader configLoader, UserManager userManager, - FileManager fileManager, AuthorizationService authorizationService, UserScope userScope) { + FileManager fileManager, AuthorizationService authorizationService, UserScope userScope, QueryFactory queryFactory) { super(apiContext); this.environment = environment; this.datasetManager = datasetManager; @@ -84,6 +84,7 @@ public class Datasets extends BaseController { this.fileManager = fileManager; this.authorizationService = authorizationService; this.userScope = userScope; + this.queryFactory = queryFactory; } /* @@ -190,14 +191,14 @@ public class Datasets extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); } - @RequestMapping(method = RequestMethod.POST, value = {"/userDmps"}, produces = "application/json") - public @ResponseBody - ResponseEntity>> getUserDmps(@RequestBody DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest) throws IllegalAccessException, InstantiationException, InvalidApplicationException { - this.authorizationService.authorizeForce(Permission.AuthenticatedRole); - - List dataManagementPlans = DatasetWizardManager.getUserDmps(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), datasetWizardAutocompleteRequest, this.userScope); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlans)); - } +// @RequestMapping(method = RequestMethod.POST, value = {"/userDmps"}, produces = "application/json") +// public @ResponseBody +// ResponseEntity>> getUserDmps(@RequestBody DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest) throws IllegalAccessException, InstantiationException, InvalidApplicationException { +// this.authorizationService.authorizeForce(Permission.AuthenticatedRole); +// +// List dataManagementPlans = DatasetWizardManager.getUserDmps(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), datasetWizardAutocompleteRequest, this.userScope); +// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlans)); +// } @RequestMapping(method = RequestMethod.POST, value = {"/getAvailableProfiles"}, produces = "application/json") public @ResponseBody @@ -228,16 +229,7 @@ public class Datasets extends BaseController { pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(pagedDatasetProfile)); } - - @RequestMapping(method = RequestMethod.GET, value = {"profile/{id}"}, produces = "application/json") - public @ResponseBody - ResponseEntity getSingleProfileUpdate(@PathVariable String id) throws IllegalAccessException, IOException, InstantiationException, InvalidApplicationException { - this.authorizationService.authorizeForce(Permission.AnonymousRole); - - DatasetWizardModel dataset = this.datasetManager.datasetUpdateProfile(id); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(dataset)); - } - + /* * Data Export * */ @@ -312,7 +304,7 @@ public class Datasets extends BaseController { this.authorizationService.authorizeForce(Permission.AuthenticatedRole); try { - new DatasetWizardManager().unlock(this.getApiContext(), id); + new DatasetWizardManager().unlock(this.getApiContext(), this.queryFactory, id); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Unlocked")); } catch (DatasetWizardCannotUnlockException datasetWizardCannotUnlockException) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(datasetWizardCannotUnlockException.getMessage())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java index 61a3e7f4d..cea30f23f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java @@ -4,6 +4,7 @@ import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.authorization.Permission; import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.FieldType; +import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity; import eu.eudat.commons.types.descriptiontemplate.FieldEntity; @@ -21,6 +22,7 @@ import eu.eudat.models.HintedModelFactory; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.query.DescriptionTemplateQuery; +import eu.eudat.query.DmpDescriptionTemplateQuery; import eu.eudat.types.ApiMessageCode; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.query.QueryFactory; @@ -143,7 +145,7 @@ public class FileController { throw new NoSuchElementException("No dataset with id " + fileUpload.getEntityId() + " found. This dataset was related to the file with id " + id); } - DMP dmp = databaseRepository.getDmpDao().find(descriptionEntityEntity.getDmpId()); + DMP dmp = databaseRepository.getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId()); if (!dmp.isPublic() && dmp.getUsers() .stream().filter(userInfo -> this.userScope.getUserIdSafe().equals(userInfo.getUser().getId())) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 467ec0306..346a2754f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -47,6 +47,7 @@ import eu.eudat.logic.services.forms.VisibilityRuleServiceImpl; import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.commons.types.xml.XmlBuilder; import eu.eudat.model.file.FileEnvelope; +import eu.eudat.query.DmpDescriptionTemplateQuery; import eu.eudat.utilities.pdf.PDFUtils; import eu.eudat.logic.utilities.documents.types.ParagraphStyle; import eu.eudat.logic.utilities.documents.word.WordBuilder; @@ -494,7 +495,7 @@ public class DataManagementPlanManager { } List descriptionEntityList = dmp1.getDataset().stream().filter(dataset -> dataset.getIsActive() != IsActive.Inactive).collect(Collectors.toList()); for (DescriptionEntity descriptionEntity : descriptionEntityList) { - if (dataManagementPlan.getProfiles().stream().filter(associatedProfile -> descriptionEntity.getDescriptionTemplateId().equals(associatedProfile.getDescriptionTemplateId())).findAny().orElse(null) == null) + if (dataManagementPlan.getProfiles().stream().filter(associatedProfile -> this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId().equals(associatedProfile.getDescriptionTemplateId())).findAny().orElse(null) == null) throw new Exception("Dataset Template for Dataset Description is missing from the DMP."); } if (dataManagementPlan.getStatus() == (int) DMP.DMPStatus.FINALISED.getValue() && dmp1.getStatus().equals(DMP.DMPStatus.FINALISED.getValue())) @@ -917,7 +918,7 @@ public class DataManagementPlanManager { if (elastic != null) { tags = elastic.getTags(); } - descriptionEntity.setDmpId(dmp.getId()); + //descriptionEntity.setDmpId(dmp.getId()); //TODO this.datasetManager.updateTags(descriptionEntity, tags); } catch (Exception e) { logger.error(e.getMessage(), e); @@ -1049,8 +1050,8 @@ public class DataManagementPlanManager { if (elastic != null) { tags = elastic.getTags(); } - UUID dmpId = tempDescriptionEntity.getDmpId(); //TODO + //UUID dmpId = tempDescriptionEntity.getDmpId(); //tempDescriptionEntity.getDmp().setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList())); this.datasetManager.updateTags(tempDescriptionEntity, tags); } catch (Exception e) { @@ -1060,9 +1061,10 @@ public class DataManagementPlanManager { .thenApplyAsync(entityDataset -> { DescriptionEntity newDescriptionEntity = new DescriptionEntity(); newDescriptionEntity.update(entityDataset); - newDescriptionEntity.setDmpId(newDmp.getId()); newDescriptionEntity.setStatus(DescriptionStatus.Saved); //TODO + //newDescriptionEntity.setDmpId(newDmp.getId()); + // if (newDescriptionEntity.getDatasetDataRepositories() != null) { // newDescriptionEntity.setDatasetDataRepositories(newDescriptionEntity.getDatasetDataRepositories().stream().map(item -> { // DataRepository dataRepository = new DataRepository(); @@ -1113,7 +1115,7 @@ public class DataManagementPlanManager { futures.add(datasetDao.createOrUpdateAsync(item).whenComplete(((dataset1, throwable) -> { DMP dmp = null; try { - dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(dataset1.getDmpId()); + dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(dataset1.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId()); } catch (InvalidApplicationException e) { throw new RuntimeException(e); } @@ -1122,9 +1124,9 @@ public class DataManagementPlanManager { datasetElastic.setId(dataset1.getId().toString()); datasetElastic.setLabel(dataset1.getLabel()); datasetElastic.setDescription(dataset1.getDescription()); - datasetElastic.setTemplate(dataset1.getDescriptionTemplateId()); + datasetElastic.setTemplate(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(dataset1.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()); + datasetElastic.setDmp(dmp.getId()); datasetElastic.setStatus(dataset1.getStatus().getValue()); - datasetElastic.setDmp(dataset1.getDmpId()); datasetElastic.setGroup(dmp.getGroupId()); if(this.dmpBlueprintService.fieldInBlueprint(dmp.getProfile(), DmpBlueprintSystemFieldType.Grant)) { datasetElastic.setGrant(dmp.getGrant().getId()); @@ -1194,8 +1196,8 @@ public class DataManagementPlanManager { if (elastic != null) { tags = elastic.getTags(); } - UUID tmdmpId = dataset.getDmpId(); //TODO + //UUID tmdmpId = dataset.getDmpId(); //dataset.getDmp().setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), tmdmpId)).toList())); this.datasetManager.updateTags(dataset, tags); metricsManager.increaseValue(MetricNames.DATASET, 1, MetricNames.PUBLISHED); @@ -1600,7 +1602,7 @@ public class DataManagementPlanManager { //runDatasetTemplate1.setBold(true); //runDatasetTemplate1.setFontSize(12); XWPFRun runDatasetTemplate = datasetTemplateParagraph.createRun(); - runDatasetTemplate.setText(this.queryFactory.query(DescriptionTemplateQuery.class).ids(datasetEntity.getDescriptionTemplateId()).first().getLabel()); + runDatasetTemplate.setText(this.queryFactory.query(DescriptionTemplateQuery.class).ids(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(datasetEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()).first().getLabel()); runDatasetTemplate.setColor("116a78"); //runDatasetTemplate.setBold(true); //runDatasetTemplate.setFontSize(12); @@ -1646,7 +1648,7 @@ public class DataManagementPlanManager { runDatasetDescription1.setText("Description: "); runDatasetDescription1.setColor("000000"); XWPFRun runDatasetDescription = datasetDescParagraph.createRun(); - runDatasetDescription.setText(this.queryFactory.query(DescriptionTemplateQuery.class).ids(datasetEntity.getDescriptionTemplateId()).first().getLabel()); + runDatasetDescription.setText(this.queryFactory.query(DescriptionTemplateQuery.class).ids(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(datasetEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()).first().getLabel()); runDatasetDescription.setColor("116a78"); //wordBuilder.addParagraphContent(datasetEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0); @@ -1928,11 +1930,11 @@ public class DataManagementPlanManager { Element datsetProfileElement = xmlDoc.createElement("profile-id"); datasetElement.appendChild(datsetProfileElement); - datsetProfileElement.setTextContent(descriptionEntity.getDescriptionTemplateId().toString()); + datsetProfileElement.setTextContent(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId().toString()); Element datsetProfileLabelElement = xmlDoc.createElement("profile-label"); datasetElement.appendChild(datsetProfileLabelElement); - datsetProfileLabelElement.setTextContent(this.queryFactory.query(DescriptionTemplateQuery.class).ids(descriptionEntity.getDescriptionTemplateId()).first().getLabel()); + datsetProfileLabelElement.setTextContent(this.queryFactory.query(DescriptionTemplateQuery.class).ids(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()).first().getLabel()); DatasetWizardModel datasetWizardModel = new DatasetWizardModel(); Map properties = new HashMap<>(); @@ -2234,18 +2236,18 @@ public class DataManagementPlanManager { descriptionEntity.setLabel(das.getName()); //TODO // descriptionEntity.setDmpSectionIndex(das.getDmpSectionIndex()); - try { - descriptionEntity.setDescriptionTemplateId(das.getProfile()); - } catch (Exception ignored) { - descriptionEntity.setDescriptionTemplateId(associatedProfiles.get(0).getDescriptionTemplateId()); - } +// try { +// descriptionEntity.setDescriptionTemplateId(das.getProfile()); +// } catch (Exception ignored) { +// descriptionEntity.setDescriptionTemplateId(associatedProfiles.get(0).getDescriptionTemplateId()); +// } +// descriptionEntity.setDmpId(dmp.getId()); descriptionEntity.setProperties(objectMapper.writeValueAsString(das.getFieldImportModels())); descriptionEntity.setStatus(DescriptionStatus.Saved); // descriptionEntity.setRegistries(new HashSet<>()); // descriptionEntity.setDatasetDataRepositories(new HashSet<>()); // descriptionEntity.setServices(new HashSet<>()); // descriptionEntity.setDatasetExternalDatasets(new HashSet<>()); - descriptionEntity.setDmpId(dmp.getId()); DatasetWizardModel datasetWizard = new DatasetWizardModel(); datasetWizard.setDatasetProfileDefinition(this.datasetManager.getPagedProfile(datasetWizard, descriptionEntity)); datasetWizard.fromDataModel(descriptionEntity); @@ -2294,7 +2296,7 @@ public class DataManagementPlanManager { dataset.setStatus(DescriptionStatus.Saved); dataset.setCreatedAt(Instant.now()); dataset.setUpdatedAt(Instant.now()); - dataset.setDmpId(dmp.getId()); + //dataset.setDmpId(dmp.getId()); //TODO dataset = databaseRepository.getDatasetDao().createOrUpdate(dataset); // dataset.setRegistries(new HashSet<>()); // dataset.setDatasetDataRepositories(new HashSet<>()); @@ -2401,8 +2403,8 @@ public class DataManagementPlanManager { if (elastic != null) { tags = elastic.getTags(); } - UUID dmpId = dataset.getDmpId(); //TODO + //UUID dmpId = dataset.getDmpId(); //dataset.getDmp().setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList())); this.datasetManager.updateTags(dataset, tags); } catch (Exception e) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index a862f55d0..90cf7f9bc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -47,7 +47,6 @@ import eu.eudat.models.data.dataset.DatasetOverviewModel; import eu.eudat.models.data.datasetImport.DatasetImportField; import eu.eudat.models.data.datasetImport.DatasetImportPagedDatasetProfile; import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; -import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dmp.AssociatedProfile; import eu.eudat.models.data.dmp.DataManagementPlan; @@ -55,6 +54,7 @@ import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.listingmodels.DatasetListingModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import eu.eudat.query.DescriptionTemplateQuery; +import eu.eudat.query.DmpDescriptionTemplateQuery; import eu.eudat.queryable.QueryableList; import eu.eudat.types.MetricNames; import gr.cite.commons.web.authz.service.AuthorizationService; @@ -299,7 +299,8 @@ public class DatasetManager { public DatasetWizardModel getSingle(String id) throws InvalidApplicationException { DatasetWizardModel dataset = new DatasetWizardModel(); DescriptionEntity descriptionEntityEntity = databaseRepository.getDatasetDao().find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class)); - DMP dmp = databaseRepository.getDmpDao().find(descriptionEntityEntity.getDmpId()); + ; + DMP dmp = databaseRepository.getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId()); if (dmp.getUsers() .stream().filter(userInfo -> this.userScope.getUserIdSafe().equals(userInfo.getUser().getId())) .collect(Collectors.toList()).size() == 0 && !dmp.isPublic()) @@ -309,7 +310,7 @@ public class DatasetManager { // Creates the Criteria to get all version of DescriptionTemplate in question. DatasetProfileCriteria profileCriteria = new DatasetProfileCriteria(); - UUID profileId = this.queryFactory.query(DescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDescriptionTemplateId()).first().getGroupId(); + UUID profileId = this.queryFactory.query(DescriptionTemplateQuery.class).ids(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()).first().getGroupId(); List uuidList = new LinkedList<>(); uuidList.add(profileId); profileCriteria.setGroupIds(uuidList); @@ -340,7 +341,7 @@ public class DatasetManager { DescriptionTemplateEntity profile = profiles.get(0); // Check if the dataset is on the latest Version. - boolean latestVersion = profile.getVersion().toString().equals(this.queryFactory.query(DescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDescriptionTemplateId()).first().getVersion()); + boolean latestVersion = profile.getVersion().toString().equals(this.queryFactory.query(DescriptionTemplateQuery.class).ids(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()).first().getVersion()); dataset.setIsProfileLatestVersion(latestVersion); eu.eudat.elastic.entities.Dataset datasetElastic; @@ -364,7 +365,7 @@ public class DatasetManager { public DatasetWizardModel getSinglePublic(String id) throws Exception { DatasetWizardModel dataset = new DatasetWizardModel(); DescriptionEntity descriptionEntityEntity = databaseRepository.getDatasetDao().isPublicDataset(UUID.fromString(id)); - DMP dmp = databaseRepository.getDmpDao().find(descriptionEntityEntity.getDmpId()); + DMP dmp = databaseRepository.getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getId()).isActive(IsActive.Active).first().getDmpId()); if (descriptionEntityEntity != null && descriptionEntityEntity.getStatus() == DescriptionStatus.Finalized && dmp.getStatus() == 1) { dataset.setDatasetProfileDefinition(getPagedProfile(dataset, descriptionEntityEntity)); dataset.fromDataModel(descriptionEntityEntity); @@ -379,7 +380,7 @@ public class DatasetManager { if (descriptionEntityEntity.getIsActive() == IsActive.Inactive) { throw new Exception("Dataset is deleted."); } - DMP dmp = databaseRepository.getDmpDao().find(descriptionEntityEntity.getDmpId()); + DMP dmp = databaseRepository.getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId()); if (!isPublic && !this.userScope.isSet()) { throw new UnauthorisedException(); } else @@ -400,7 +401,7 @@ public class DatasetManager { } public PagedDatasetProfile getPagedProfile(DatasetWizardModel dataset, DescriptionEntity descriptionEntityEntity) { - eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(this.queryFactory.query(DescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDescriptionTemplateId()).first()); + eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(this.queryFactory.query(DescriptionTemplateQuery.class).ids(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()).first()); datasetprofile.setStatus(dataset.getStatus().getValue()); if (descriptionEntityEntity.getProperties() != null) { JSONObject jObject = new JSONObject(descriptionEntityEntity.getProperties()); @@ -417,7 +418,7 @@ public class DatasetManager { DatasetWizardModel dataset = new DatasetWizardModel(); XWPFDocument document = configLoader.getDatasetDocument(); - DMP dmpEntity = databaseRepository.getDmpDao().find(descriptionEntityEntity.getDmpId()); + DMP dmpEntity = databaseRepository.getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId()); if (!dmpEntity.isPublic() && dmpEntity.getUsers().stream().filter(userInfo -> this.userScope.getUserIdSafe().equals(userInfo.getUser().getId())).collect(Collectors.toList()).size() == 0) throw new UnauthorisedException(); @@ -555,7 +556,7 @@ public class DatasetManager { public FileEnvelope getWordDocumentFile(ConfigLoader configLoader, String id, VisibilityRuleService visibilityRuleService) throws IOException, InvalidApplicationException { DescriptionEntity descriptionEntityEntity = databaseRepository.getDatasetDao().find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class)); - DMP dmp = databaseRepository.getDmpDao().find(descriptionEntityEntity.getDmpId()); + DMP dmp = databaseRepository.getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId()); if (!dmp.isPublic() && dmp.getUsers() .stream().filter(userInfo -> this.userScope.getUserIdSafe().equals(userInfo.getUser().getId())) .collect(Collectors.toList()).size() == 0) @@ -585,7 +586,7 @@ public class DatasetManager { ExportXmlBuilder xmlBuilder = new ExportXmlBuilder(); DatasetWizardModel dataset = new DatasetWizardModel(); DescriptionEntity descriptionEntityEntity = databaseRepository.getDatasetDao().find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class)); - DMP dmp = databaseRepository.getDmpDao().find(descriptionEntityEntity.getDmpId()); + DMP dmp = databaseRepository.getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId()); if (!dmp.isPublic() && dmp.getUsers() .stream().filter(userInfo -> this.userScope.getUserIdSafe().equals(userInfo.getUser().getId())) .collect(Collectors.toList()).size() == 0) @@ -598,7 +599,7 @@ public class DatasetManager { PagedDatasetProfile pagedDatasetProfile = getPagedProfile(dataset, descriptionEntityEntity); visibilityRuleService.setProperties(properties); visibilityRuleService.buildVisibilityContext(pagedDatasetProfile.getRules()); - File file = xmlBuilder.build(pagedDatasetProfile, descriptionEntityEntity.getDescriptionTemplateId(), visibilityRuleService, environment); + File file = xmlBuilder.build(pagedDatasetProfile, this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId(), visibilityRuleService, environment); FileEnvelope fileEnvelope = new FileEnvelope(); fileEnvelope.setFile(file); String label = descriptionEntityEntity.getLabel().replaceAll("[^a-zA-Z0-9+ ]", ""); @@ -627,7 +628,7 @@ public class DatasetManager { if (dmp.getStatus().equals(DMP.DMPStatus.FINALISED.getValue()) && datasetWizardModel.getId() != null) throw new Exception("DMP is finalized, therefore Dataset cannot be edited."); DescriptionEntity descriptionEntity = datasetWizardModel.toDataModel(); - descriptionEntity.setDmpId(dmp.getId()); +// descriptionEntity.setDmpId(dmp.getId()); //TODO descriptionEntity.setProperties(propertiesModelToString(datasetWizardModel.getDatasetProfileDefinition())); if (this.apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().getClient() != null) { this.getTagsFromProfile(datasetWizardModel, descriptionEntity); @@ -648,14 +649,14 @@ public class DatasetManager { DescriptionEntity descriptionEntity1 = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(descriptionEntity); datasetWizardModel.setId(descriptionEntity1.getId()); if (datasetWizardModel.getDmp().getGrant() == null) { - DMP dmp1 = databaseRepository.getDmpDao().find(descriptionEntity1.getDmpId()); + DMP dmp1 = databaseRepository.getDmpDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntity1.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId()); datasetWizardModel.setDmp(new DataManagementPlan().fromDataModelNoDatasets(dmp1)); } - descriptionEntity1.setDescriptionTemplateId(datasetWizardModel.getProfile().getId()); +// descriptionEntity1.setDescriptionTemplateId(datasetWizardModel.getProfile().getId()); //TODO // datasetWizardModel.setDatasetProfileDefinition(getPagedProfile(datasetWizardModel, dataset1)); - UUID dmpId = descriptionEntity1.getDmpId(); - DMP dmp1 = databaseRepository.getDmpDao().find(descriptionEntity1.getDmpId()); + UUID dmpId = this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntity1.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId(); + DMP dmp1 = databaseRepository.getDmpDao().find(dmpId); dmp1.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList())); updateTags(descriptionEntity1, datasetWizardModel.getTags()); if (sendNotification) { @@ -737,7 +738,7 @@ public class DatasetManager { public String checkDatasetValidation(DescriptionEntity descriptionEntity) throws Exception { List datasetProfileValidators = new LinkedList<>(); - DescriptionTemplateEntity profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(descriptionEntity.getDescriptionTemplateId()); + DescriptionTemplateEntity profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); Document xmlDocument = builder.parse(new ByteArrayInputStream(profile.getDefinition().getBytes())); @@ -759,7 +760,7 @@ public class DatasetManager { VisibilityRuleService visibilityRuleService = new VisibilityRuleServiceImpl(); visibilityRuleService.setProperties(obj.toMap()); - descriptionEntity.setDescriptionTemplateId(profile.getId()); + //descriptionEntity.setDescriptionTemplateId(profile.getId()); //TODO PagedDatasetProfile pagedDatasetProfile = this.getPagedProfile(new DatasetWizardModel(), descriptionEntity); visibilityRuleService.buildVisibilityContext(pagedDatasetProfile.getRules()); @@ -1030,13 +1031,13 @@ public class DatasetManager { entity.setLabel(importFile.getOriginalFilename()); DMP dmp = new DMP(); dmp.setId(UUID.fromString(dmpId)); - entity.setDmpId(dmp.getId()); +// entity.setDmpId(dmp.getId()); //TODO entity.setStatus(DescriptionStatus.Saved); entity.setCreatedAt(Instant.now()); entity.setUpdatedAt(Instant.now()); DescriptionTemplateEntity profile = new DescriptionTemplateEntity(); profile.setId(UUID.fromString(datasetProfileId)); - entity.setDescriptionTemplateId(profile.getId()); +// entity.setDescriptionTemplateId(profile.getId());//TODO UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); entity.setDmpDescriptionTemplateId(userInfo.getId()); @@ -1055,46 +1056,6 @@ public class DatasetManager { // TODO: When tags functionality return. } - public DatasetWizardModel datasetUpdateProfile(String id) throws InvalidApplicationException { - DatasetWizardModel dataset = new DatasetWizardModel(); - DescriptionEntity descriptionEntityEntity = databaseRepository.getDatasetDao().find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class)); - dataset.setDatasetProfileDefinition(getPagedProfile(dataset, descriptionEntityEntity)); - dataset.fromDataModel(descriptionEntityEntity); - - // Creates the Criteria to get all version of DescriptionTemplate in question. - DatasetProfileCriteria profileCriteria = new DatasetProfileCriteria(); - - UUID profileId = this.queryFactory.query(DescriptionTemplateQuery.class).ids(descriptionEntityEntity.getDescriptionTemplateId()).first().getGroupId(); - List uuidList = new LinkedList<>(); - uuidList.add(profileId); - profileCriteria.setGroupIds(uuidList); - - // Gets the latest version of the datasetProfile. - DescriptionTemplateEntity item = databaseRepository.getDatasetProfileDao().getWithCriteria(profileCriteria).getSingle(); - - // Sets the latest version of dataet Profile to the Dataset in question. - dataset.setDatasetProfileDefinition(getLatestDatasetProfile(descriptionEntityEntity, item)); - dataset.setProfile(new DatasetProfileOverviewModel().fromDataModel(item)); - - // Now at latest version. - dataset.setIsProfileLatestVersion(true); - - eu.eudat.elastic.entities.Dataset datasetElastic; - try { - datasetElastic = datasetRepository.exists() ? - datasetRepository.findDocument(id) : new eu.eudat.elastic.entities.Dataset(); - } catch (Exception ex) { - logger.warn(ex.getMessage()); - datasetElastic = null; - } - if (datasetElastic != null && datasetElastic.getTags() != null && !datasetElastic.getTags().isEmpty()) { - dataset.setTags(datasetElastic.getTags()); - } - /*if (datasetElastic != null && datasetElastic.getLabel() != null && !datasetElastic.getLabel().isEmpty()) { - dataset.setLabel(datasetElastic.getLabel()); - }*/ - return dataset; - } public PagedDatasetProfile getLatestDatasetProfile(DescriptionEntity descriptionEntityEntity, DescriptionTemplateEntity profile) { eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(profile); @@ -1130,8 +1091,8 @@ public class DatasetManager { descriptionEntityEntities.forEach(datasetEntity -> { try { eu.eudat.elastic.entities.Dataset dataset = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(datasetEntity.getId().toString()); - UUID dmpId = datasetEntity.getDmpId(); - DMP dmp = databaseRepository.getDmpDao().find(datasetEntity.getDmpId()); + UUID dmpId = this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(datasetEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDmpId(); + DMP dmp = databaseRepository.getDmpDao().find(dmpId); dmp.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList())); updateTags(datasetEntity, dataset != null ? dataset.getTags() : null); } catch (Exception e) { @@ -1152,7 +1113,7 @@ public class DatasetManager { } public void getTagsFromProfile(DatasetWizardModel wizardModel, DescriptionEntity descriptionEntity) throws IOException, InvalidApplicationException { - descriptionEntity.setDescriptionTemplateId(descriptionEntity.getDescriptionTemplateId()); +// descriptionEntity.setDescriptionTemplateId(descriptionEntity.getDescriptionTemplateId()); //TODO wizardModel.setDatasetProfileDefinition(this.getPagedProfile(wizardModel, descriptionEntity)); ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(wizardModel.getDatasetProfileDefinition()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java index eae5daf6a..c1c8745b1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java @@ -17,7 +17,9 @@ import eu.eudat.logic.services.ApiContext; import eu.eudat.models.data.datasetwizard.DataManagentPlanListingModel; import eu.eudat.models.data.dmp.AssociatedProfile; import eu.eudat.models.data.dmp.DataManagementPlan; +import eu.eudat.query.DmpDescriptionTemplateQuery; import eu.eudat.queryable.QueryableList; +import gr.cite.tools.data.query.QueryFactory; import javax.management.InvalidApplicationException; import java.io.IOException; @@ -52,9 +54,9 @@ public class DatasetWizardManager { return profiles; } - public void unlock(ApiContext apiContext, UUID uuid) throws DatasetWizardCannotUnlockException, InvalidApplicationException { + public void unlock(ApiContext apiContext, QueryFactory queryFactory, UUID uuid) throws DatasetWizardCannotUnlockException, InvalidApplicationException { DescriptionEntity descriptionEntity = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().find(uuid); - DMP dmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(descriptionEntity.getDmpId()); + DMP dmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()); if(dmp.getStatus() == DMP.DMPStatus.FINALISED.getValue()) throw new DatasetWizardCannotUnlockException("To perform this action you will need to revert DMP's finalisation"); descriptionEntity.setStatus(DescriptionStatus.Saved); apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(descriptionEntity); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java index 8b8b8bd0d..8f1bc49c2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java @@ -1,10 +1,13 @@ package eu.eudat.logic.managers; import eu.eudat.commons.enums.DescriptionTemplateStatus; +import eu.eudat.commons.enums.IsActive; import eu.eudat.data.dao.criteria.*; import eu.eudat.data.DescriptionTemplateEntity; import eu.eudat.logic.services.ApiContext; +import eu.eudat.query.DmpDescriptionTemplateQuery; import eu.eudat.types.MetricNames; +import gr.cite.tools.data.query.QueryFactory; import io.micrometer.prometheus.PrometheusMeterRegistry; import io.prometheus.client.Gauge; import org.slf4j.Logger; @@ -77,12 +80,14 @@ public class MetricsManager { private final ApiContext apiContext; private final UserManager userManager; private final Environment environment; + private final QueryFactory queryFactory; @Autowired - public MetricsManager(ApiContext apiContext, UserManager userManager, Environment environment, PrometheusMeterRegistry registry) { + public MetricsManager(ApiContext apiContext, UserManager userManager, Environment environment, PrometheusMeterRegistry registry, QueryFactory queryFactory) { this.apiContext = apiContext; this.userManager = userManager; this.environment = environment; + this.queryFactory = queryFactory; registry.clear(); this.gauges = Stream.of( new Object[][]{ {MetricNames.DMP, Gauge.build().name(MetricNames.DMP).help("Number of managed DMPs").labelNames("status").register(registry.getPrometheusRegistry())}, @@ -409,7 +414,7 @@ public class MetricsManager { List descriptionTemplateEntities = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().getWithCriteria(criteria).withFields(Collections.singletonList("id")).toList(); DatasetCriteria datasetCriteria = new DatasetCriteria(); datasetCriteria.setDatasetTemplates(descriptionTemplateEntities.stream().map(DescriptionTemplateEntity::getId).collect(Collectors.toList())); - return apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(datasetCriteria).select(root -> root.getDescriptionTemplateId()).stream().distinct().count(); + return apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(datasetCriteria).select(root -> this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(root.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()).stream().distinct().count(); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetMapper.java index ddb148676..2074047e5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetMapper.java @@ -19,10 +19,10 @@ public class DatasetMapper { } public Dataset toElastic(DescriptionEntity descriptionEntity, List tags) throws Exception { - if (descriptionEntity.getDescriptionTemplateId() == null) { - return null; - } //TODO +// if (descriptionEntity.getDescriptionTemplateId() == null) { +// return null; +// } Dataset elastic = new Dataset(); // elastic.setId(descriptionEntity.getId().toString()); // if (tags != null && !tags.isEmpty()) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DmpMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DmpMapper.java index fecc8f16f..5fd57ab4a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DmpMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DmpMapper.java @@ -70,7 +70,7 @@ public class DmpMapper { if (dataset1 != null) { tags = dataset1.getTags(); } - dataset.setDmpId(dmp.getId()); + //dataset.setDmpId(dmp.getId()); //TODO return datasetMapper.toElastic(dataset, tags); } catch (Exception e) { logger.error(e.getMessage(), e); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java index 5170a024e..4fe7046e5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java @@ -53,7 +53,7 @@ public class PrefillingMapper { DatasetWizardModel datasetWizardModel = new DatasetWizardModel(); datasetWizardModel.setProfile(new DatasetProfileOverviewModel().fromDataModel(profile)); DescriptionEntity descriptionEntity = new DescriptionEntity(); - descriptionEntity.setDescriptionTemplateId(profile.getId()); + //descriptionEntity.setDescriptionTemplateId(profile.getId()); //TODO Map properties = new HashMap<>(); JsonNode parentNode = mapper.readTree(mapper.writeValueAsString(datasetManager.getPagedProfile(datasetWizardModel, descriptionEntity))); for (DefaultPrefillingMapping prefillingMapping: prefillingGet.getMappings()) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java index 0714da5ad..0ed072de9 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java @@ -3,6 +3,7 @@ package eu.eudat.models.rda.mapper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; +import eu.eudat.commons.enums.IsActive; import eu.eudat.data.DescriptionEntity; import eu.eudat.data.DescriptionTemplateEntity; import eu.eudat.elastic.criteria.DatasetCriteria; @@ -13,6 +14,8 @@ import eu.eudat.logic.utilities.helpers.StreamDistinctBy; import eu.eudat.logic.utilities.json.JsonSearcher; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.rda.*; +import eu.eudat.query.DmpDescriptionTemplateQuery; +import gr.cite.tools.data.query.QueryFactory; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,11 +38,13 @@ public class DatasetRDAMapper { private DatasetManager datasetManager; private ApiContext apiContext; + private final QueryFactory queryFactory; @Autowired - public DatasetRDAMapper(DatasetManager datasetManager, ApiContext apiContext) { + public DatasetRDAMapper(DatasetManager datasetManager, ApiContext apiContext, QueryFactory queryFactory) { this.datasetManager = datasetManager; this.apiContext = apiContext; + this.queryFactory = queryFactory; } @Transactional @@ -51,7 +56,7 @@ public class DatasetRDAMapper { } rda.setTitle(descriptionEntity.getLabel()); rda.setDescription(descriptionEntity.getDescription()); - rda.setAdditionalProperty("template", descriptionEntity.getDescriptionTemplateId()); + rda.setAdditionalProperty("template", this.queryFactory.query(DmpDescriptionTemplateQuery.class).ids(descriptionEntity.getDmpDescriptionTemplateId()).isActive(IsActive.Active).first().getDescriptionTemplateId()); //TODO try { JSONObject jObject = new JSONObject(descriptionEntity.getProperties()); Map templateIdsToValues = jObject.toMap(); @@ -288,10 +293,10 @@ public class DatasetRDAMapper { entity.setDescription(rda.getDescription()); try { DescriptionTemplateEntity profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(rda.getAdditionalProperties().get("template").toString())); - entity.setDescriptionTemplateId(profile.getId()); + //entity.setDescriptionTemplateId(profile.getId()); //TODO }catch(Exception e) { logger.warn(e.getMessage(), e); - entity.setDescriptionTemplateId(defaultProfile.getId()); +// entity.setDescriptionTemplateId(defaultProfile.getId()); //TODO } try { Map properties = new HashMap<>();