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 cf51b9e7f..bcc4e193c 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 @@ -257,11 +257,11 @@ public class DescriptionQuery extends QueryBase { predicates.add(inClause); } if (this.dmpDescriptionTemplateQuery != null) { - QueryContext subQuery = this.applySubQuery(this.dmpDescriptionTemplateQuery, queryContext, UUID.class, DmpDescriptionTemplate._id); + QueryContext subQuery = this.applySubQuery(this.dmpDescriptionTemplateQuery, queryContext, UUID.class, dmpDescriptionTemplateEntityRoot -> dmpDescriptionTemplateEntityRoot.get(DmpDescriptionTemplateEntity._id)); predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._dmpDescriptionTemplateId)).value(subQuery.Query)); } if (this.dmpQuery != null) { - QueryContext subQuery = this.applySubQuery(this.dmpQuery, queryContext, UUID.class, Dmp._id); + QueryContext subQuery = this.applySubQuery(this.dmpQuery, queryContext, UUID.class, dmpEntityRoot -> dmpEntityRoot.get(DmpEntity._id)); predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._dmpId)).value(subQuery.Query)); } if (!predicates.isEmpty()) { diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DmpQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DmpQuery.java index 1460ad9b2..c093035fb 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DmpQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DmpQuery.java @@ -288,8 +288,8 @@ public class DmpQuery extends QueryBase { } if (this.dmpDescriptionTemplateQuery != null) { - QueryContext subQuery = this.applySubQuery(this.dmpDescriptionTemplateQuery, queryContext, UUID.class, DmpDescriptionTemplate._dmp); - predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._dmpDescriptionTemplateId)).value(subQuery.Query)); + QueryContext subQuery = this.applySubQuery(this.dmpDescriptionTemplateQuery, queryContext, UUID.class, dmpDescriptionTemplateEntityRoot -> dmpDescriptionTemplateEntityRoot.get(DmpDescriptionTemplateEntity._dmpId)); + predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(DmpEntity._id)).value(subQuery.Query)); } if (!predicates.isEmpty()) { Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/UserQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/UserQuery.java index ed637a443..415e8dc79 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/UserQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/UserQuery.java @@ -196,7 +196,7 @@ public class UserQuery extends QueryBase { predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(UserEntity._id)).value(userContactInfoSubquery)); } if (this.userRoleQuery != null) { - QueryContext subQuery = this.applySubQuery(this.userRoleQuery, queryContext, UUID.class, UserRole._user); + QueryContext subQuery = this.applySubQuery(this.userRoleQuery, queryContext, UUID.class, userRoleEntityRoot -> userRoleEntityRoot.get(UserRoleEntity._userId)); predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(UserEntity._id)).value(subQuery.Query)); } diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DmpLookup.java b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DmpLookup.java index 9a45c71c3..ba6e4ed6b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DmpLookup.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DmpLookup.java @@ -21,6 +21,7 @@ public class DmpLookup extends Lookup { private List ids; private List excludedIds; + private List groupIds; private List isActive; private List versionStatuses; @@ -104,10 +105,19 @@ public class DmpLookup extends Lookup { this.dmpDescriptionTemplateSubQuery = dmpDescriptionTemplateSubQuery; } + public List getGroupIds() { + return groupIds; + } + + public void setGroupIds(List groupIds) { + this.groupIds = groupIds; + } + public DmpQuery enrich(QueryFactory queryFactory) { DmpQuery query = queryFactory.query(DmpQuery.class); if (this.like != null) query.like(this.like); if (this.ids != null) query.ids(this.ids); + if (this.groupIds != null) query.groupIds(this.groupIds); if (this.excludedIds != null) query.excludedIds(this.excludedIds); if (this.accessTypes != null) query.accessTypes(this.accessTypes); if (this.isActive != null) query.isActive(this.isActive); @@ -125,6 +135,7 @@ public class DmpLookup extends Lookup { DmpElasticQuery query = queryFactory.query(DmpElasticQuery.class); if (this.like != null) query.like(this.like); if (this.ids != null) query.ids(this.ids); + if (this.groupIds != null) query.groupIds(this.groupIds); if (this.excludedIds != null) query.excludedIds(this.excludedIds); if (this.accessTypes != null) query.accessTypes(this.accessTypes); if (this.statuses != null) query.statuses(this.statuses); @@ -141,6 +152,7 @@ public class DmpLookup extends Lookup { InnerObjectDmpElasticQuery query = queryFactory.query(InnerObjectDmpElasticQuery.class); if (this.like != null) query.like(this.like); if (this.ids != null) query.ids(this.ids); + if (this.groupIds != null) query.groupIds(this.groupIds); if (this.excludedIds != null) query.excludedIds(this.excludedIds); if (this.accessTypes != null) query.accessTypes(this.accessTypes); if (this.statuses != null) query.statuses(this.statuses); 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 7d01d14ea..d72208a37 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 @@ -166,10 +166,10 @@ public class DescriptionServiceImpl implements DescriptionService { if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Description.class.getSimpleName()}, LocaleContextHolder.getLocale())); if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash())) throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage()); if (!data.getStatus().equals(model.getStatus())){ - if (data.getStatus() == DescriptionStatus.Finalized){ + if (data.getStatus().equals(DescriptionStatus.Finalized)){ DmpEntity dmpEntity = this.entityManager.find(DmpEntity.class, data.getDmpId()); if (dmpEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{data.getDmpId(), DmpEntity.class.getSimpleName()}, LocaleContextHolder.getLocale())); - if(dmpEntity.getStatus() .equals(DmpStatus.Finalized)) throw new MyValidationException(this.errors.getDmpIsFinalized().getCode(), this.errors.getDmpIsFinalized().getMessage()); + if(!dmpEntity.getStatus().equals(DmpStatus.Draft)) throw new MyValidationException(this.errors.getDmpIsFinalized().getCode(), this.errors.getDmpIsFinalized().getMessage()); } data.setStatus(model.getStatus()); diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index ec9675e3a..16aba4f65 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -315,7 +315,7 @@ gr.cite data-tools - 2.1.1 + 2.1.2 gr.cite diff --git a/dmp-backend/web/src/main/java/eu/eudat/EuDatApplication.java b/dmp-backend/web/src/main/java/eu/eudat/EuDatApplication.java index 2c90fed48..9c352e6ee 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/EuDatApplication.java +++ b/dmp-backend/web/src/main/java/eu/eudat/EuDatApplication.java @@ -3,16 +3,20 @@ package eu.eudat; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import eu.eudat.data.BaseEntity; +import org.jetbrains.annotations.NotNull; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication(scanBasePackages = { @@ -31,9 +35,22 @@ public class EuDatApplication extends SpringBootServletInitializer { @Primary public ObjectMapper primaryObjectMapper() { return JsonMapper.builder().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, true) .serializationInclusion(JsonInclude.Include.NON_NULL) .addModule(new JavaTimeModule()).build(); } +// @Bean +// public Jackson2ObjectMapperBuilder objectMapperBuilder() { +// return new Jackson2ObjectMapperBuilder() { +// +// @Override +// public void configure(ObjectMapper objectMapper) { +// objectMapper.registerModule(new JavaTimeModule()); +// super.configure(objectMapper); +// } +// }; +// +// } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {