From d1df83f689a735c9c55f30d969385f1bce509d2d Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Fri, 25 Jun 2021 19:27:02 +0300
Subject: [PATCH 01/16] Add query db fallback for DMPs
---
.../logic/managers/DataManagementPlanManager.java | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
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 dbf63563c..ab1ac3d84 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
@@ -130,11 +130,16 @@ public class DataManagementPlanManager {
QueryableList items = null;
QueryableList authItems = null;
if (apiContext.getOperationsContext().getElasticRepository().getDmpRepository() != null) {
- DmpCriteria criteria = DmpCriteriaMapper.toElasticCriteria(dataManagementPlanTableRequest.getCriteria());
- dmps = apiContext.getOperationsContext().getElasticRepository().getDmpRepository().query(criteria);
- if (dmps != null && !dmps.isEmpty()) {
- List finalDmps = dmps;
- items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable().where((builder, root) -> root.get("id").in(finalDmps.stream().map(Dmp::getId).collect(Collectors.toList())));
+ try {
+ DmpCriteria criteria = DmpCriteriaMapper.toElasticCriteria(dataManagementPlanTableRequest.getCriteria());
+ dmps = apiContext.getOperationsContext().getElasticRepository().getDmpRepository().query(criteria);
+ if (dmps != null && !dmps.isEmpty()) {
+ List finalDmps = dmps;
+ items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable().where((builder, root) -> root.get("id").in(finalDmps.stream().map(Dmp::getId).collect(Collectors.toList())));
+ }
+ } catch (Exception ex) {
+ logger.error(ex.getMessage(), ex);
+ items = null;
}
}
if (items == null) {
From 03b7699973cee0d552e01e3525a765495def7074 Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Fri, 25 Jun 2021 19:29:51 +0300
Subject: [PATCH 02/16] Reduce severity
---
.../java/eu/eudat/logic/managers/DataManagementPlanManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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 ab1ac3d84..0b577f39b 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
@@ -138,7 +138,7 @@ public class DataManagementPlanManager {
items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable().where((builder, root) -> root.get("id").in(finalDmps.stream().map(Dmp::getId).collect(Collectors.toList())));
}
} catch (Exception ex) {
- logger.error(ex.getMessage(), ex);
+ logger.warn(ex.getMessage(), ex);
items = null;
}
}
From dcd7f24cace7396c6533f94a125754c0e43bc47b Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Tue, 29 Jun 2021 11:45:20 +0300
Subject: [PATCH 03/16] Fix listing issues and improve elastic query
---
.../main/java/eu/eudat/data/entities/DMP.java | 8 +-
.../elastic/criteria/DatasetCriteria.java | 27 ++++
.../eudat/elastic/criteria/DmpCriteria.java | 37 ++++++
.../eudat/elastic/criteria/SortCriteria.java | 39 ++++++
.../eudat/elastic/entities/Collaborator.java | 12 +-
.../eu/eudat/elastic/entities/Dataset.java | 37 ++++++
.../java/eu/eudat/elastic/entities/Dmp.java | 62 +++++++++-
.../elastic/repository/DatasetRepository.java | 24 +++-
.../elastic/repository/DmpRepository.java | 92 +++++++++++++-
.../logic/managers/DashBoardManager.java | 6 +-
.../managers/DataManagementPlanManager.java | 117 +++++++++++++-----
.../eudat/logic/managers/DatasetManager.java | 26 +++-
.../mapper/elastic/CollaboratorMapper.java | 3 +-
.../logic/mapper/elastic/DatasetMapper.java | 5 +-
.../eudat/logic/mapper/elastic/DmpMapper.java | 6 +-
.../elastic/criteria/DmpCriteriaMapper.java | 28 ++++-
.../DataManagementPlanListingModel.java | 56 ++++-----
17 files changed, 505 insertions(+), 80 deletions(-)
create mode 100644 dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/SortCriteria.java
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java
index 1a475db17..b4f212210 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java
@@ -15,11 +15,11 @@ import java.util.stream.Collectors;
@NamedEntityGraphs({
@NamedEntityGraph(
name = "dataManagementPlanListingModel",
- attributeNodes = {@NamedAttributeNode("organisations"), @NamedAttributeNode("researchers"), @NamedAttributeNode("associatedDmps"),
- @NamedAttributeNode("grant"), @NamedAttributeNode(value = "users", subgraph = "users"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile"), @NamedAttributeNode("dataset")},
- subgraphs = {
+ attributeNodes = {
+ @NamedAttributeNode("grant"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile")}/*,*/
+ /*subgraphs = {
@NamedSubgraph(name = "users", attributeNodes = {@NamedAttributeNode("user")}),
- }
+ }*/
),
@NamedEntityGraph(
name = "fullyDetailed",
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DatasetCriteria.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DatasetCriteria.java
index 62d2fc5a4..705093384 100644
--- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DatasetCriteria.java
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DatasetCriteria.java
@@ -21,6 +21,9 @@ public class DatasetCriteria extends Criteria {
private List tags;
private boolean isPublic;
private Short grantStatus;
+ private int offset;
+ private int size;
+ private List sortCriteria;
public String getLike() {
return like;
@@ -117,4 +120,28 @@ public class DatasetCriteria extends Criteria {
public void setGrantStatus(Short grantStatus) {
this.grantStatus = grantStatus;
}
+
+ public int getOffset() {
+ return offset;
+ }
+
+ public void setOffset(int offset) {
+ this.offset = offset;
+ }
+
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+
+ public List getSortCriteria() {
+ return sortCriteria;
+ }
+
+ public void setSortCriteria(List sortCriteria) {
+ this.sortCriteria = sortCriteria;
+ }
}
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DmpCriteria.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DmpCriteria.java
index 4f9a89962..fb12d48aa 100644
--- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DmpCriteria.java
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DmpCriteria.java
@@ -9,11 +9,16 @@ public class DmpCriteria extends Criteria {
private List templates;
private List grants;
private List collaborators;
+ private List roles;
private List organizations;
private boolean isPublic;
private List groupIds;
private boolean allowAllVersions;
private Short grantStatus;
+ private int offset;
+ private int size;
+ private List sortCriteria;
+
public String getLike() {
return like;
@@ -55,6 +60,14 @@ public class DmpCriteria extends Criteria {
this.collaborators = collaborators;
}
+ public List getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List roles) {
+ this.roles = roles;
+ }
+
public List getOrganizations() {
return organizations;
}
@@ -94,4 +107,28 @@ public class DmpCriteria extends Criteria {
public void setGrantStatus(Short grantStatus) {
this.grantStatus = grantStatus;
}
+
+ public int getOffset() {
+ return offset;
+ }
+
+ public void setOffset(int offset) {
+ this.offset = offset;
+ }
+
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+
+ public List getSortCriteria() {
+ return sortCriteria;
+ }
+
+ public void setSortCriteria(List sortCriteria) {
+ this.sortCriteria = sortCriteria;
+ }
}
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/SortCriteria.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/SortCriteria.java
new file mode 100644
index 000000000..0d1876a76
--- /dev/null
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/SortCriteria.java
@@ -0,0 +1,39 @@
+package eu.eudat.elastic.criteria;
+
+public class SortCriteria {
+ public enum OrderByType {
+ ASC, DESC
+ }
+
+ public enum ColumnType {
+ COUNT, COLUMN, JOIN_COLUMN
+ }
+
+ private String fieldName;
+ private OrderByType orderByType;
+ private ColumnType columnType;
+
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ public void setFieldName(String fieldName) {
+ this.fieldName = fieldName;
+ }
+
+ public OrderByType getOrderByType() {
+ return orderByType;
+ }
+
+ public void setOrderByType(OrderByType orderByType) {
+ this.orderByType = orderByType;
+ }
+
+ public ColumnType getColumnType() {
+ return columnType;
+ }
+
+ public void setColumnType(ColumnType columnType) {
+ this.columnType = columnType;
+ }
+}
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Collaborator.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Collaborator.java
index 4a9a06d26..386a0fc22 100644
--- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Collaborator.java
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Collaborator.java
@@ -4,11 +4,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.Map;
-import java.util.UUID;
public class Collaborator implements ElasticEntity {
private String id;
private String name;
+ private int role;
public String getId() {
return id;
@@ -26,11 +26,20 @@ public class Collaborator implements ElasticEntity {
this.name = name;
}
+ public int getRole() {
+ return role;
+ }
+
+ public void setRole(int role) {
+ this.role = role;
+ }
+
@Override
public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException {
builder.startObject();
builder.field("id", this.id);
builder.field("name", this.name);
+ builder.field("role", this.role);
builder.endObject();
return builder;
}
@@ -39,6 +48,7 @@ public class Collaborator implements ElasticEntity {
public Collaborator fromElasticEntity(Map fields) {
this.id = (String) fields.get("id");
this.name = (String) fields.get("name");
+ this.role = (int) fields.get("role");
return this;
}
}
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dataset.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dataset.java
index ee538c06b..c54088f18 100644
--- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dataset.java
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dataset.java
@@ -5,6 +5,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
+import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
@@ -59,6 +60,9 @@ public class Dataset implements ElasticEntity {
private Boolean isPublic;
private Short grantStatus;
private String formData;
+ private Date created;
+ private Date modified;
+ private Date finalizedAt;
public String getId() {
return id;
@@ -188,6 +192,30 @@ public class Dataset implements ElasticEntity {
this.formData = formData;
}
+ public Date getCreated() {
+ return created;
+ }
+
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ public Date getModified() {
+ return modified;
+ }
+
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ public Date getFinalizedAt() {
+ return finalizedAt;
+ }
+
+ public void setFinalizedAt(Date finalizedAt) {
+ this.finalizedAt = finalizedAt;
+ }
+
@Override
public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException {
builder.startObject();
@@ -197,6 +225,9 @@ public class Dataset implements ElasticEntity {
builder.field("template", this.template.toString());
builder.field("status", this.status.toString());
builder.field("dmp", this.dmp.toString());
+ builder.field("created", this.created);
+ builder.field("modified", this.modified);
+ builder.field("finalizedAt", this.finalizedAt);
if (this.group != null) {
builder.field("group", this.group.toString());
}
@@ -263,6 +294,12 @@ public class Dataset implements ElasticEntity {
this.dmp = UUID.fromString((String) fields.get("dmp"));
this.group = UUID.fromString((String) fields.get("group"));
this.grant = UUID.fromString((String) fields.get("grant"));
+ if (fields.get("created") != null)
+ this.created = Date.from(Instant.parse((String) fields.get("created")));
+ if (fields.get("modified") != null)
+ this.modified = Date.from(Instant.parse((String) fields.get("modified")));
+ if (fields.get("finalizedAt") != null)
+ this.finalizedAt = Date.from(Instant.parse((String) fields.get("finalizedAt")));
if (fields.get("collaborators") != null) {
this.collaborators = ((List) fields.get("collaborators")).stream().map(hashMap -> new Collaborator().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dmp.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dmp.java
index b10147413..8faea3233 100644
--- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dmp.java
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dmp.java
@@ -5,10 +5,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
import java.util.stream.Collectors;
public class Dmp implements ElasticEntity {
@@ -55,6 +52,11 @@ public class Dmp implements ElasticEntity {
private List datasets;
private UUID grant;
private Short grantStatus;
+ private Date created;
+ private Date modified;
+ private Date finalizedAt;
+ private Date publishedAt;
+ private String doi;
public UUID getId() {
return id;
@@ -168,6 +170,46 @@ public class Dmp implements ElasticEntity {
this.grantStatus = grantStatus;
}
+ public Date getCreated() {
+ return created;
+ }
+
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ public Date getModified() {
+ return modified;
+ }
+
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ public Date getFinalizedAt() {
+ return finalizedAt;
+ }
+
+ public void setFinalizedAt(Date finalizedAt) {
+ this.finalizedAt = finalizedAt;
+ }
+
+ public Date getPublishedAt() {
+ return publishedAt;
+ }
+
+ public void setPublishedAt(Date publishedAt) {
+ this.publishedAt = publishedAt;
+ }
+
+ public String getDoi() {
+ return doi;
+ }
+
+ public void setDoi(String doi) {
+ this.doi = doi;
+ }
+
@Override
public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException {
builder.startObject();
@@ -233,6 +275,11 @@ public class Dmp implements ElasticEntity {
builder.field(MapKey.GRANT.getName(), this.grant.toString());
}
builder.field(MapKey.GRANTSTATUS.getName(), this.grantStatus);
+ builder.field(MapKey.CREATED.getName(), this.created);
+ builder.field(MapKey.MODIFIED.getName(), this.modified);
+ builder.field(MapKey.FINALIZEDAT.getName(), this.finalizedAt);
+ builder.field(MapKey.PUBLISHEDAT.getName(), this.publishedAt);
+ builder.field(MapKey.DOI.getName(), this.doi);
builder.endObject();
return builder;
}
@@ -282,7 +329,12 @@ public class Dmp implements ElasticEntity {
ISPUBLIC ("isPublic"),
DATASETS ("datasets"),
GRANT ("grant"),
- GRANTSTATUS ("grantStatus");
+ GRANTSTATUS ("grantStatus"),
+ CREATED ("created"),
+ MODIFIED ("modified"),
+ FINALIZEDAT ("finalizedAt"),
+ PUBLISHEDAT ("publishedAt"),
+ DOI ("doi");
private final String name;
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DatasetRepository.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DatasetRepository.java
index b8c26a489..33ff68253 100644
--- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DatasetRepository.java
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DatasetRepository.java
@@ -24,6 +24,9 @@ import org.elasticsearch.search.aggregations.bucket.filter.ParsedFilters;
import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested;
import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.search.sort.SortBuilder;
+import org.elasticsearch.search.sort.SortBuilders;
+import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.Environment;
@@ -120,6 +123,7 @@ public class DatasetRepository extends ElasticRepository sortBuilders = new ArrayList<>();
if (criteria.isPublic()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.public", "true"));
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.status", Dataset.Status.FINALISED.getValue()));
@@ -181,8 +185,26 @@ public class DatasetRepository extends ElasticRepository {
+ switch(sortCriteria.getColumnType()) {
+ case COLUMN:
+ sortBuilders.add(SortBuilders.fieldSort(sortCriteria.getFieldName()).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
+ break;
+ case JOIN_COLUMN:
+ List fields = Arrays.asList(sortCriteria.getFieldName().split(":"));
+ fields.stream().filter(name -> !name.startsWith("dmp")).forEach(field -> {
+ sortBuilders.add(SortBuilders.fieldSort(field).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
+ });
+ break;
+ }
+ });
+
+ }
+
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("datasets", boolQuery, ScoreMode.Avg).innerHit(new InnerHitBuilder());
- searchSourceBuilder.query(nestedQueryBuilder);
+ searchSourceBuilder.query(nestedQueryBuilder).from(criteria.getOffset()).size(criteria.getSize());
+ sortBuilders.forEach(searchSourceBuilder::sort);
searchRequest.source(searchSourceBuilder);
SearchResponse response = this.getClient().search(searchRequest, RequestOptions.DEFAULT);
return ((Stream)Arrays.stream(response.getHits().getHits())
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DmpRepository.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DmpRepository.java
index 2829c85d1..124c7cc55 100644
--- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DmpRepository.java
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DmpRepository.java
@@ -23,6 +23,9 @@ import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.search.sort.SortBuilder;
+import org.elasticsearch.search.sort.SortBuilders;
+import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -97,6 +100,7 @@ public class DmpRepository extends ElasticRepository {
searchSourceBuilder.size(count.intValue());
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(Dmp.MapKey.STATUS.getName(), Collections.singletonList(Dmp.DMPStatus.DELETED.getValue())));
+ List sortBuilders = new ArrayList<>();
if (criteria.isPublic()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.ISPUBLIC.getName(), true));
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.STATUS.getName(), Dmp.DMPStatus.FINALISED.getValue()));
@@ -125,7 +129,11 @@ public class DmpRepository extends ElasticRepository {
}
if (criteria.getCollaborators() != null && criteria.getCollaborators().size() > 0) {
- boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.COLLABORATORS.getName() + ".keyword", criteria.getCollaborators().stream().map(UUID::toString).collect(Collectors.toList())));
+ boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.COLLABORATORS.getName() + ".id.keyword", criteria.getCollaborators().stream().map(UUID::toString).collect(Collectors.toList())));
+ }
+
+ if (criteria.getRoles() != null && criteria.getRoles().size() > 0) {
+ boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.COLLABORATORS.getName() + ".role.keyword", criteria.getRoles()));
}
if (!criteria.isAllowAllVersions()) {
@@ -145,7 +153,26 @@ public class DmpRepository extends ElasticRepository {
} else {
boolQuery.minimumShouldMatch(boolQuery.should().size());
}
- searchSourceBuilder.query(boolQuery);
+
+ if (criteria.getSortCriteria() != null && !criteria.getSortCriteria().isEmpty()) {
+ criteria.getSortCriteria().forEach(sortCriteria -> {
+ switch(sortCriteria.getColumnType()) {
+ case COLUMN:
+ sortBuilders.add(SortBuilders.fieldSort(sortCriteria.getFieldName()).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
+ break;
+ case JOIN_COLUMN:
+ List fields = Arrays.asList(sortCriteria.getFieldName().split(":"));
+ fields.forEach(field -> {
+ sortBuilders.add(SortBuilders.fieldSort(sortCriteria.getFieldName()).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
+ });
+ break;
+ }
+ });
+
+ }
+
+ searchSourceBuilder.query(boolQuery).from(criteria.getOffset()).size(criteria.getSize());
+ sortBuilders.forEach(searchSourceBuilder::sort);
searchRequest.source(searchSourceBuilder);
SearchResponse response = this.getClient().search(searchRequest, RequestOptions.DEFAULT);
return Arrays.stream(response.getHits().getHits()).map(x -> new Dmp().fromElasticEntity((Map) this.transformFromString(x.getSourceAsString(), Map.class))).collect(Collectors.toList());
@@ -153,6 +180,67 @@ public class DmpRepository extends ElasticRepository {
return null;
}
+ public Long count(DmpCriteria criteria) throws IOException {
+ if (this.getClient() != null) {
+ CountRequest countRequest = new CountRequest(this.environment.getProperty("elasticsearch.index"));
+
+ BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(Dmp.MapKey.STATUS.getName(), Collections.singletonList(Dmp.DMPStatus.DELETED.getValue())));
+ if (criteria.isPublic()) {
+ boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.ISPUBLIC.getName(), true));
+ boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.STATUS.getName(), Dmp.DMPStatus.FINALISED.getValue()));
+ }
+ if (criteria.getLike() != null && !criteria.getLike().isEmpty()) {
+ boolQuery = boolQuery.should(QueryBuilders.queryStringQuery(criteria.getLike()).fields(Stream.of(new Object[][]{
+ {Dmp.MapKey.LABEL.getName(), 1.0f},
+ {Dmp.MapKey.DESCRIPTION.getName(), 1.0f}
+ }).collect(Collectors.toMap(data -> (String) data[0], data -> (Float) data[1]))));
+ }
+
+ if (criteria.getTemplates() != null && criteria.getTemplates().size() > 0) {
+ boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.TEMPLATES.getName() + ".id.keyword", criteria.getTemplates().stream().map(UUID::toString).collect(Collectors.toList())));
+ }
+
+ if (criteria.getStatus() != null) {
+ boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.STATUS.getName(), criteria.getStatus().intValue()));
+ }
+
+ if (criteria.getGroupIds() != null && criteria.getGroupIds().size() > 0) {
+ boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.GROUPID.getName(), criteria.getGroupIds().stream().map(UUID::toString).collect(Collectors.toList())));
+ }
+
+ if (criteria.getGrants() != null && criteria.getGrants().size() > 0) {
+ boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.GRANT.getName() + ".keyword", criteria.getGrants().stream().map(UUID::toString).collect(Collectors.toList())));
+ }
+
+ if (criteria.getCollaborators() != null && criteria.getCollaborators().size() > 0) {
+ boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.COLLABORATORS.getName() + ".id.keyword", criteria.getCollaborators().stream().map(UUID::toString).collect(Collectors.toList())));
+ }
+
+ if (!criteria.isAllowAllVersions()) {
+ boolQuery = boolQuery.should(QueryBuilders.termQuery(criteria.isPublic() ? Dmp.MapKey.LASTPUBLICVERSION.getName() : Dmp.MapKey.LASTVERSION.getName(), true));
+ }
+
+ if (criteria.getOrganizations() != null && criteria.getOrganizations().size() > 0) {
+ boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.ORGANIZATIONS.getName() + ".id.keyword", criteria.getOrganizations().stream().map(UUID::toString).collect(Collectors.toList())));
+ }
+
+ if (criteria.getGrantStatus() != null) {
+ boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.GRANTSTATUS.getName(), criteria.getGrantStatus()));
+ }
+
+ if (boolQuery.should().isEmpty() && boolQuery.mustNot().isEmpty()) {
+ boolQuery = boolQuery.should(QueryBuilders.matchAllQuery());
+ } else {
+ boolQuery.minimumShouldMatch(boolQuery.should().size());
+ }
+
+ countRequest.query(boolQuery);
+ CountResponse response = this.getClient().count(countRequest, RequestOptions.DEFAULT);
+ return response.getCount();
+ }
+ return null;
+ }
+
public boolean createIndex() {
try {
if (!this.exists()) {
diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java
index b6bf4e918..a01ef19ef 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java
@@ -182,14 +182,14 @@ public class DashBoardManager {
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
.whenComplete((datasetActivities, throwable) -> activity.setRecentDatasetActivities(datasetActivities));
- CompletableFuture> grants = grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user)
+ /*CompletableFuture> grants = grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user)
.withHint("grantRecentActivity")
.orderBy((builder, root) -> builder.desc(root.get("modified")))
.take(numberofactivities)
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
- .whenComplete((grantActivities, throwable) -> activity.setRecentGrantActivities(grantActivities));
+ .whenComplete((grantActivities, throwable) -> activity.setRecentGrantActivities(grantActivities));*/
- CompletableFuture.allOf(grants, dmps, datasets).join();
+ CompletableFuture.allOf(/*grants, */dmps, datasets).join();
return activity;
}
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 0b577f39b..50782785a 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
@@ -13,6 +13,7 @@ import eu.eudat.data.enumeration.notification.ActiveStatus;
import eu.eudat.data.enumeration.notification.ContactType;
import eu.eudat.data.enumeration.notification.NotificationType;
import eu.eudat.data.enumeration.notification.NotifyState;
+import eu.eudat.data.query.items.table.dataset.DatasetTableRequest;
import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem;
import eu.eudat.data.query.items.table.dmp.DataManagementPlanTableRequest;
import eu.eudat.elastic.criteria.DmpCriteria;
@@ -129,13 +130,19 @@ public class DataManagementPlanManager {
List dmps = null;
QueryableList items = null;
QueryableList authItems = null;
+ Long totalData = 0L;
if (apiContext.getOperationsContext().getElasticRepository().getDmpRepository() != null) {
try {
- DmpCriteria criteria = DmpCriteriaMapper.toElasticCriteria(dataManagementPlanTableRequest.getCriteria());
+ DmpCriteria criteria = DmpCriteriaMapper.toElasticCriteria(dataManagementPlanTableRequest.getCriteria(), principalID);
+ criteria.setOffset(dataManagementPlanTableRequest.getOffset());
+ criteria.setSize(dataManagementPlanTableRequest.getLength());
+ criteria.setSortCriteria(DmpCriteriaMapper.toElasticSorting(dataManagementPlanTableRequest.getOrderings()));
dmps = apiContext.getOperationsContext().getElasticRepository().getDmpRepository().query(criteria);
if (dmps != null && !dmps.isEmpty()) {
List finalDmps = dmps;
items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable().where((builder, root) -> root.get("id").in(finalDmps.stream().map(Dmp::getId).collect(Collectors.toList())));
+ PaginationManager.applyOrder(items, dataManagementPlanTableRequest);
+ totalData = apiContext.getOperationsContext().getElasticRepository().getDmpRepository().count(criteria);
}
} catch (Exception ex) {
logger.warn(ex.getMessage(), ex);
@@ -144,63 +151,116 @@ public class DataManagementPlanManager {
}
if (items == null) {
items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(dataManagementPlanTableRequest.getCriteria());
+ List roles = new LinkedList<>();
+ if (!dataManagementPlanTableRequest.getCriteria().isOnlyPublic()) {
+ if (dataManagementPlanTableRequest.getCriteria().getRole() != null)
+ roles.add(dataManagementPlanTableRequest.getCriteria().getRole());
+ authItems = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(items, principalID, roles);
+ } else {
+ authItems = items;
+ }
+ totalData = authItems.count();
+ items = PaginationManager.applyPaging(authItems, dataManagementPlanTableRequest);
}
- List roles = new LinkedList<>();
- if (!dataManagementPlanTableRequest.getCriteria().isOnlyPublic()) {
- if (dataManagementPlanTableRequest.getCriteria().getRole() != null)
- roles.add(dataManagementPlanTableRequest.getCriteria().getRole());
- authItems = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(items, principalID, roles);
- } else {
- authItems = items;
- }
- QueryableList pagedItems = PaginationManager.applyPaging(authItems, dataManagementPlanTableRequest);
+
+
DataTableData dataTable = new DataTableData<>();
CompletableFuture itemsFuture;
if (fieldsGroup.equals("listing")) {
if (!dataManagementPlanTableRequest.getCriteria().isOnlyPublic()) {
- itemsFuture = pagedItems.withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class))
- .distinct()
- .selectAsync(item -> {
+ List dmps1 = items.withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class))
+ .distinct().toList();
+ dataTable.setData(dmps1.stream().map(dmp -> {
+ DatasetCriteria datasetCriteria = new DatasetCriteria();
+ datasetCriteria.setDmpIds(Collections.singletonList(dmp.getId()));
+ dmp.setDataset(retrieveRelevantDatasets(datasetCriteria, principalID));
+
+
+ return new DataManagementPlanListingModel().fromDataModelDatasets(dmp);
+ }).collect(Collectors.toList()));
+ /*.selectAsync(item -> {
item.setDataset(
item.getDataset().stream()
.filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue())).collect(Collectors.toList()).stream()
- .filter(dataset -> dataset.getDmp().getUsers().stream()
+ *//*.filter(dataset -> dataset.getDmp().getUsers().stream()
.filter(x -> x.getUser().getId().equals(principalID))
- .collect(Collectors.toList()).size() > 0)
+ .collect(Collectors.toList()).size() > 0)*//*
.collect(Collectors.toSet()));
return new DataManagementPlanListingModel().fromDataModelDatasets(item);
})
- .whenComplete((resultList, throwable) -> dataTable.setData(resultList));
+ .whenComplete((resultList, throwable) -> dataTable.setData(resultList));*/
} else {
- itemsFuture = pagedItems.withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class))
- .distinct()
- .selectAsync(item -> {
+ List dmps1 = items.withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class))
+ .distinct().toList();
+ dataTable.setData(dmps1.stream().map(dmp -> {
+ DatasetCriteria datasetCriteria = new DatasetCriteria();
+ datasetCriteria.setDmpIds(Collections.singletonList(dmp.getId()));
+ datasetCriteria.setIsPublic(true);
+ dmp.setDataset(retrieveRelevantDatasets(datasetCriteria));
+
+
+ return new DataManagementPlanListingModel().fromDataModelDatasets(dmp);
+ }).collect(Collectors.toList()));
+ /*.selectAsync(item -> {
item.setDataset(
item.getDataset().stream()
.filter(dataset -> dataset.getStatus().equals(Dataset.Status.FINALISED.getValue())).collect(Collectors.toSet()));
return new DataManagementPlanListingModel().fromDataModelDatasets(item);
})
- .whenComplete((resultList, throwable) -> dataTable.setData(resultList));
+ .whenComplete((resultList, throwable) -> dataTable.setData(resultList));*/
}
} else if (fieldsGroup.equals("autocomplete")) {
- itemsFuture = pagedItems
+ dataTable.setData(items
.distinct()
- .selectAsync(item -> new DataManagementPlanListingModel().fromDataModelAutoComplete(item))
- .whenComplete((resultList, throwable) -> dataTable.setData(resultList));
+ .select(item -> new DataManagementPlanListingModel().fromDataModelAutoComplete(item)));
} else {
- itemsFuture = pagedItems
+ dataTable.setData(items
.distinct()
- .selectAsync(item -> new DataManagementPlanListingModel().fromDataModelAssociatedProfiles(item))
- .whenComplete((resultList, throwable) -> dataTable.setData(resultList));
+ .select(item -> new DataManagementPlanListingModel().fromDataModelAssociatedProfiles(item)));
}
- CompletableFuture countFuture = authItems.distinct().countAsync().whenComplete((count, throwable) -> dataTable.setTotalCount(count));
- CompletableFuture.allOf(itemsFuture, countFuture).join();
+ //CompletableFuture countFuture = authItems.distinct().countAsync().whenComplete((count, throwable) -> dataTable.setTotalCount(count));
+ dataTable.setTotalCount(totalData);
+ //CompletableFuture.allOf(itemsFuture).join();
return dataTable;
}
+ private Set retrieveRelevantDatasets(DatasetCriteria datasetCriteria) {
+ return retrieveRelevantDatasets(datasetCriteria, null);
+ }
+
+ private Set retrieveRelevantDatasets (DatasetCriteria datasetCriteria, UUID principal) {
+ QueryableList datasetItems = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(datasetCriteria);
+ if (principal != null) {
+ UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal);
+ List roles = new ArrayList<>();
+ roles.add(0);
+ roles.add(1);
+ datasetItems = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getAuthenticated(datasetItems, userInfo, roles);
+ }
+ Long maxDatasets = datasetItems.count();
+ DatasetTableRequest datasetTableRequest = new DatasetTableRequest();
+ datasetTableRequest.setOffset(0);
+ datasetTableRequest.setLength(3);
+ Set datasetsSet = new LinkedHashSet<>();
+ try {
+ datasetItems = PaginationManager.applyPaging(datasetItems, datasetTableRequest);
+ List datasets = datasetItems.toList();
+ datasetsSet.addAll(datasets);
+ for (int i = 0; i < maxDatasets - datasets.size(); i++) {
+ Dataset fakedataset = new Dataset();
+ fakedataset.setId(UUID.randomUUID());
+ datasetsSet.add(fakedataset);
+ }
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+
+ return datasetsSet;
+ }
+
public eu.eudat.models.data.dmp.DataManagementPlan getSingle(String id, Principal principal, boolean isPublic) throws Exception {
eu.eudat.models.data.dmp.DataManagementPlan dataManagementPlan = new eu.eudat.models.data.dmp.DataManagementPlan();
DMP dataManagementPlanEntity = databaseRepository.getDmpDao().find(UUID.fromString(id));
@@ -864,6 +924,7 @@ public class DataManagementPlanManager {
datasetElastic.setCollaborators(dataset1.getDmp().getUsers().stream().map(user -> {
Collaborator collaborator = new Collaborator();
collaborator.setId(user.getId().toString());
+ collaborator.setRole(user.getRole());
// collaborator.setName(user.getUser().getName());
return collaborator;
}).collect(Collectors.toList()));
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 65809a4e7..069e381e3 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
@@ -22,6 +22,7 @@ import eu.eudat.exceptions.security.UnauthorisedException;
import eu.eudat.logic.builders.BuilderFactory;
import eu.eudat.logic.builders.entity.UserInfoBuilder;
import eu.eudat.logic.mapper.elastic.DatasetMapper;
+import eu.eudat.logic.mapper.elastic.criteria.DmpCriteriaMapper;
import eu.eudat.logic.proxy.config.configloaders.ConfigLoader;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.logic.services.forms.VisibilityRuleService;
@@ -137,9 +138,21 @@ public class DatasetManager {
if (datasetTableRequest.getCriteria().getIsPublic() != null) {
datasetCriteria.setPublic(datasetTableRequest.getCriteria().getIsPublic());
}
+
+ if (!datasetCriteria.isPublic()) {
+ if (datasetCriteria.getCollaborators() == null) {
+ datasetCriteria.setSortCriteria(new ArrayList<>());
+ }
+ datasetCriteria.getCollaborators().add(principal.getId());
+ }
if (datasetTableRequest.getCriteria().getGrantStatus() != null) {
datasetCriteria.setGrantStatus(datasetTableRequest.getCriteria().getGrantStatus());
}
+ if (datasetTableRequest.getOrderings() != null) {
+ datasetCriteria.setSortCriteria(DmpCriteriaMapper.toElasticSorting(datasetTableRequest.getOrderings()));
+ }
+ datasetCriteria.setOffset(datasetTableRequest.getOffset());
+ datasetCriteria.setSize(datasetTableRequest.getLength());
List datasets;
try {
datasets = datasetRepository.exists() ?
@@ -206,6 +219,11 @@ public class DatasetManager {
datasetCriteria.setDatasetTemplates(datasetTableRequest.getCriteria().getDatasetProfile());
datasetCriteria.setDmps(datasetTableRequest.getCriteria().getDmpIds());
datasetCriteria.setGrants(datasetTableRequest.getCriteria().getGrants());
+ if (datasetTableRequest.getOrderings() != null) {
+ datasetCriteria.setSortCriteria(DmpCriteriaMapper.toElasticSorting(datasetTableRequest.getOrderings()));
+ }
+ datasetCriteria.setOffset(datasetTableRequest.getOffset());
+ datasetCriteria.setSize(datasetTableRequest.getLength());
List datasets;
try {
datasets = datasetRepository.exists() ?
@@ -214,9 +232,9 @@ public class DatasetManager {
logger.warn(ex.getMessage());
datasets = null;
}
- datasetTableRequest.setQuery(databaseRepository.getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class)));
- QueryableList items = datasetTableRequest.applyCriteria();
- /*QueryableList items;
+ /*datasetTableRequest.setQuery(databaseRepository.getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class)));
+ QueryableList items = datasetTableRequest.applyCriteria();*/
+ QueryableList items;
if (datasets != null) {
if (!datasets.isEmpty()) {
items = databaseRepository.getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class));
@@ -227,7 +245,7 @@ public class DatasetManager {
items.where((builder, root) -> root.get("id").in(new UUID[]{UUID.randomUUID()}));
} else {
items = datasetTableRequest.applyCriteria();
- }*/
+ }
if (principal.getId() != null && datasetTableRequest.getCriteria().getRole() != null) {
items.where((builder, root) -> {
diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/CollaboratorMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/CollaboratorMapper.java
index a80260840..2ae10cba8 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/CollaboratorMapper.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/CollaboratorMapper.java
@@ -5,10 +5,11 @@ import eu.eudat.elastic.entities.Collaborator;
public class CollaboratorMapper {
- public static Collaborator toElastic(UserInfo user) {
+ public static Collaborator toElastic(UserInfo user, Integer role) {
Collaborator elastic = new Collaborator();
elastic.setId(user.getId().toString());
elastic.setName(user.getName());
+ elastic.setRole(role);
return elastic;
}
}
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 46d4f632b..dad3924d9 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
@@ -50,8 +50,11 @@ public class DatasetMapper {
elastic.setDmp(dataset.getDmp().getId());
elastic.setGroup(dataset.getDmp().getGroupId());
elastic.setGrant(dataset.getDmp().getGrant().getId());
+ elastic.setCreated(dataset.getCreated());
+ elastic.setModified(dataset.getModified());
+ elastic.setFinalizedAt(dataset.getFinalizedAt());
if (dataset.getDmp().getUsers() != null) {
- elastic.setCollaborators(dataset.getDmp().getUsers().stream().map(user -> CollaboratorMapper.toElastic(user.getUser())).collect(Collectors.toList()));
+ elastic.setCollaborators(dataset.getDmp().getUsers().stream().map(user -> CollaboratorMapper.toElastic(user.getUser(), user.getRole())).collect(Collectors.toList()));
}
DataManagementPlanCriteria dmpCriteria = new DataManagementPlanCriteria();
dmpCriteria.setAllVersions(true);
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 608da5fca..92eb02bfe 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
@@ -34,13 +34,17 @@ public class DmpMapper {
elastic.setId(dmp.getId());
elastic.setGroupId(dmp.getGroupId());
if (dmp.getUsers() != null) {
- elastic.setCollaborators(dmp.getUsers().stream().map(user -> CollaboratorMapper.toElastic(user.getUser())).collect(Collectors.toList()));
+ elastic.setCollaborators(dmp.getUsers().stream().map(user -> CollaboratorMapper.toElastic(user.getUser(), user.getRole())).collect(Collectors.toList()));
}
elastic.setDescription(dmp.getDescription());
elastic.setGrant(dmp.getGrant().getId());
elastic.setLabel(dmp.getLabel());
elastic.setPublic(dmp.isPublic());
elastic.setStatus(dmp.getStatus());
+ elastic.setCreated(dmp.getCreated());
+ elastic.setModified(dmp.getModified());
+ elastic.setFinalizedAt(dmp.getFinalizedAt());
+ elastic.setPublishedAt(dmp.getPublishedAt());
DataManagementPlanCriteria dmpCriteria = new DataManagementPlanCriteria();
dmpCriteria.setAllVersions(true);
dmpCriteria.setGroupIds(Collections.singletonList(dmp.getGroupId()));
diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java
index bb1b0cf7c..810161ff2 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java
@@ -2,14 +2,20 @@ package eu.eudat.logic.mapper.elastic.criteria;
import eu.eudat.data.dao.criteria.DataManagementPlanCriteria;
import eu.eudat.data.entities.Grant;
+import eu.eudat.data.query.definition.helpers.ColumnOrderings;
+import eu.eudat.data.query.definition.helpers.Ordering;
import eu.eudat.elastic.criteria.DmpCriteria;
+import eu.eudat.elastic.criteria.SortCriteria;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
public class DmpCriteriaMapper {
- public static DmpCriteria toElasticCriteria(DataManagementPlanCriteria criteria) {
+ public static DmpCriteria toElasticCriteria(DataManagementPlanCriteria criteria, UUID principalID) {
DmpCriteria elastic = new DmpCriteria();
elastic.setAllowAllVersions(criteria.getAllVersions());
@@ -23,6 +29,12 @@ public class DmpCriteriaMapper {
elastic.setOrganizations(criteria.getOrganisations().stream().map(UUID::fromString).collect(Collectors.toList()));
}
elastic.setPublic(criteria.getIsPublic());
+ if (!elastic.isPublic()) {
+ elastic.setCollaborators(Collections.singletonList(principalID));
+ }
+ if (criteria.getRole() != null) {
+ elastic.setRoles(Collections.singletonList(criteria.getRole()));
+ }
if (criteria.getStatus() != null) {
elastic.setStatus(criteria.getStatus().shortValue());
}
@@ -30,4 +42,18 @@ public class DmpCriteriaMapper {
elastic.setGrantStatus(criteria.getGrantStatus());
return elastic;
}
+
+ public static List toElasticSorting(ColumnOrderings columnOrderings) {
+ List sortCriteria = new ArrayList<>();
+ if (columnOrderings.getFieldOrderings() != null && columnOrderings.getFieldOrderings().length > 0) {
+ for (Ordering ordering: columnOrderings.getFieldOrderings()) {
+ SortCriteria sortCriteria1 = new SortCriteria();
+ sortCriteria1.setFieldName(ordering.getFieldName());
+ sortCriteria1.setColumnType(ordering.getColumnType() != null ? SortCriteria.ColumnType.valueOf(ordering.getColumnType().name()): SortCriteria.ColumnType.COLUMN);
+ sortCriteria1.setOrderByType(SortCriteria.OrderByType.valueOf(ordering.getOrderByType().name()));
+ sortCriteria.add(sortCriteria1);
+ }
+ }
+ return sortCriteria;
+ }
}
diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java
index 1a2483314..48df2685e 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java
@@ -24,19 +24,19 @@ public class DataManagementPlanListingModel implements DataModel datasets;
- private List associatedProfiles;
+ //private List associatedProfiles;
private List users;
private String description;
- private String grantAbbreviation;
- private String grantId;
+ // private String grantAbbreviation;
+ // private String grantId;
private Date finalizedAt;
private Boolean isPublic;
private Date publishedAt;
@@ -63,19 +63,19 @@ public class DataManagementPlanListingModel implements DataModel getAssociatedProfiles() {
+ /*public List getAssociatedProfiles() {
return associatedProfiles;
}
public void setAssociatedProfiles(List associatedProfiles) {
this.associatedProfiles = associatedProfiles;
- }
+ }*/
public List getUsers() {
return users;
@@ -140,19 +140,19 @@ public class DataManagementPlanListingModel implements DataModel new AssociatedProfile().fromData(item)).collect(Collectors.toList());
+ /*this.creationTime = entity.getCreated();
+ this.associatedProfiles = entity.getAssociatedDmps().stream().map(item -> new AssociatedProfile().fromData(item)).collect(Collectors.toList());*/
return this;
}
@@ -196,7 +196,7 @@ public class DataManagementPlanListingModel implements DataModel new Organisation().fromDataModel(item)).collect(Collectors.toList()));
+// this.organisations = LabelBuilder.getLabel(entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()));
this.datasets = entity.getDataset().stream().map(x-> new DatasetUrlListing().fromDataModel(x)).collect(Collectors.toList());
this.users = entity.getUsers().stream().map(x -> new UserInfoListingModel().fromDataModel(x)).collect(Collectors.toList());
this.description = entity.getDescription();
- this.grantAbbreviation = entity.getGrant().getAbbreviation();
- this.grantId = entity.getGrant().getId().toString();
+// this.grantAbbreviation = entity.getGrant().getAbbreviation();
+// this.grantId = entity.getGrant().getId().toString();
this.finalizedAt = entity.getFinalizedAt();
this.isPublic = entity.isPublic();
this.publishedAt = entity.getPublishedAt();
- if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) {
+ /*if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) {
this.associatedProfiles = new LinkedList<>();
for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) {
AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile);
this.associatedProfiles.add(associatedProfile);
}
- }
+ }*/
return this;
}
From d1e3aae36d744d7a8b5a573c30c1989cfdc0055d Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Wed, 30 Jun 2021 12:51:12 +0300
Subject: [PATCH 04/16] Fix critical issue with dataset's copy dropdown
---
.../data/query/definition/helpers/ColumnOrderings.java | 4 ++++
.../main/java/eu/eudat/elastic/criteria/DmpCriteria.java | 6 +++---
.../eu/eudat/logic/managers/DataManagementPlanManager.java | 3 +--
.../logic/mapper/elastic/criteria/DmpCriteriaMapper.java | 2 +-
.../data/listingmodels/DataManagementPlanListingModel.java | 6 +++---
.../dataset-copy-dialogue.component.ts | 3 ++-
6 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/helpers/ColumnOrderings.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/helpers/ColumnOrderings.java
index b01f8078d..7ab879b59 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/helpers/ColumnOrderings.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/helpers/ColumnOrderings.java
@@ -34,6 +34,10 @@ public class ColumnOrderings {
ordering.fieldName(ordering.getFieldName().replace("|count|", "")).columnType(Ordering.ColumnType.COUNT);
else if (ordering.getFieldName().contains("|join|"))
ordering.fieldName(ordering.getFieldName().replace("|join|", "")).columnType(Ordering.ColumnType.JOIN_COLUMN);
+ else if (ordering.getFieldName().equals("asc"))
+ ordering.fieldName("label").orderByType(Ordering.OrderByType.ASC);
+ else if (ordering.getFieldName().equals("desc"))
+ ordering.fieldName("label").orderByType(Ordering.OrderByType.DESC);
return ordering;
}
}
diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DmpCriteria.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DmpCriteria.java
index fb12d48aa..e354ec3cf 100644
--- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DmpCriteria.java
+++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DmpCriteria.java
@@ -16,7 +16,7 @@ public class DmpCriteria extends Criteria {
private boolean allowAllVersions;
private Short grantStatus;
private int offset;
- private int size;
+ private Integer size;
private List sortCriteria;
@@ -116,11 +116,11 @@ public class DmpCriteria extends Criteria {
this.offset = offset;
}
- public int getSize() {
+ public Integer getSize() {
return size;
}
- public void setSize(int size) {
+ public void setSize(Integer size) {
this.size = size;
}
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 50782785a..ae7c63c7a 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
@@ -69,8 +69,6 @@ import org.springframework.core.env.Environment;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.client.RestTemplate;
@@ -137,6 +135,7 @@ public class DataManagementPlanManager {
criteria.setOffset(dataManagementPlanTableRequest.getOffset());
criteria.setSize(dataManagementPlanTableRequest.getLength());
criteria.setSortCriteria(DmpCriteriaMapper.toElasticSorting(dataManagementPlanTableRequest.getOrderings()));
+
dmps = apiContext.getOperationsContext().getElasticRepository().getDmpRepository().query(criteria);
if (dmps != null && !dmps.isEmpty()) {
List finalDmps = dmps;
diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java
index 810161ff2..1e7bae4b7 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java
@@ -48,7 +48,7 @@ public class DmpCriteriaMapper {
if (columnOrderings.getFieldOrderings() != null && columnOrderings.getFieldOrderings().length > 0) {
for (Ordering ordering: columnOrderings.getFieldOrderings()) {
SortCriteria sortCriteria1 = new SortCriteria();
- sortCriteria1.setFieldName(ordering.getFieldName());
+ sortCriteria1.setFieldName(ordering.getFieldName() + ".keyword");
sortCriteria1.setColumnType(ordering.getColumnType() != null ? SortCriteria.ColumnType.valueOf(ordering.getColumnType().name()): SortCriteria.ColumnType.COLUMN);
sortCriteria1.setOrderByType(SortCriteria.OrderByType.valueOf(ordering.getOrderByType().name()));
sortCriteria.add(sortCriteria1);
diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java
index 48df2685e..ad8bcda51 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java
@@ -32,7 +32,7 @@ public class DataManagementPlanListingModel implements DataModel datasets;
- //private List associatedProfiles;
+// private List associatedProfiles;
private List users;
private String description;
// private String grantAbbreviation;
@@ -187,8 +187,8 @@ public class DataManagementPlanListingModel implements DataModel new AssociatedProfile().fromData(item)).collect(Collectors.toList());*/
+// this.creationTime = entity.getCreated();
+// this.associatedProfiles = entity.getAssociatedDmps().stream().map(item -> new AssociatedProfile().fromData(item)).collect(Collectors.toList());
return this;
}
diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component.ts
index a5dbca945..37b53eb00 100644
--- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component.ts
+++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component.ts
@@ -61,7 +61,8 @@ export class DatasetCopyDialogueComponent {
const dmpDataTableRequest: DataTableRequest = new DataTableRequest(0, null, { fields: fields });
dmpDataTableRequest.criteria = new DmpCriteria();
dmpDataTableRequest.criteria.like = query;
- return this.dmpService.getPaged(dmpDataTableRequest, "profiles").pipe(map(x => x.data), map(x => x.filter(y => this.existsDatasetDescriptionTemplate(y.associatedProfiles))));
+ dmpDataTableRequest.criteria.datasetTemplates = [this.data.datasetProfileId];
+ return this.dmpService.getPaged(dmpDataTableRequest, "profiles").pipe(map(x => x.data));
}
existsDatasetDescriptionTemplate(associatedProfiles: DmpAssociatedProfileModel[]): boolean {
From 57d1cf89b42b2884e9f036ae865d56c944fb861a Mon Sep 17 00:00:00 2001
From: Kristan Ntavidi
Date: Wed, 30 Jun 2021 13:01:33 +0300
Subject: [PATCH 05/16] Dataset overview fix. Actions on unlocked dataset.
---
.../src/app/ui/dataset/overview/dataset-overview.component.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts b/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts
index 3d5b72096..3b2494b3d 100644
--- a/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts
+++ b/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts
@@ -173,7 +173,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
setIsUserOwner() {
if (this.dataset) {
const principal: Principal = this.authentication.current();
- if (principal) this.isUserOwner = principal.id === this.dataset.users.find(x => x.role === Role.Owner).id;
+ if (principal) this.isUserOwner = !!this.dataset.users.find(x => (x.role === Role.Owner) && (principal.id === x.id));
}
}
From 295750684f95ebcfe22f56fb53a4589b74b23af1 Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Wed, 30 Jun 2021 14:09:29 +0300
Subject: [PATCH 06/16] Minor Update
---
.../ui/admin/index-managment/index-managment.component.html | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html
index bf8020a0d..27c0733f8 100644
--- a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html
+++ b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html
@@ -1,8 +1,9 @@
+
Warning: Danger zone. It might delete Dataset tags if not careful
-
+
From 4e3b98f1ff6b375091fb2445b34aab8ada3f38fd Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Wed, 30 Jun 2021 17:17:17 +0300
Subject: [PATCH 07/16] Improvements over MS Word Document export
---
.../managers/DataManagementPlanManager.java | 2 +-
.../utilities/documents/word/WordBuilder.java | 89 ++++++++++++-------
2 files changed, 59 insertions(+), 32 deletions(-)
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 ae7c63c7a..2ef9a576b 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
@@ -1257,7 +1257,7 @@ public class DataManagementPlanManager {
if (versioned) {
fileName += "_" + dmpEntity.getVersion();
}
- fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", "");
+ // fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", "");
FileEnvelope exportEnvelope = new FileEnvelope();
exportEnvelope.setFilename(fileName + ".docx");
String uuid = UUID.randomUUID().toString();
diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java
index 41675e624..764ac5a6f 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java
@@ -144,67 +144,89 @@ public class WordBuilder {
private void createSections(List sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, Integer page, String sectionString) {
if (createListing) this.addListing(mainDocumentPart, indent, false, true);
- sections.forEach(section -> {
+ boolean hasValue = false;
+ for (Section section: sections) {
+ int paragraphPos = -1;
String tempSectionString = sectionString != null ? sectionString + "." + (section.getOrdinal() + 1) : "" + (section.getOrdinal() + 1);
if (visibilityRuleService.isElementVisible(section.getId())) {
if (!createListing) {
XWPFParagraph paragraph = addParagraphContent(page + "." + tempSectionString + " " + section.getTitle(), mainDocumentPart, style, numId);
CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl();
number.setVal(BigInteger.valueOf(indent));
+ paragraphPos = mainDocumentPart.getPosOfParagraph(paragraph);
}
createSections(section.getSections(), mainDocumentPart, ParagraphStyle.HEADER5, 1, createListing, visibilityRuleService, page, tempSectionString);
- createCompositeFields(section.getCompositeFields(), mainDocumentPart, 2, createListing, visibilityRuleService, page, tempSectionString);
+ hasValue = createCompositeFields(section.getCompositeFields(), mainDocumentPart, 2, createListing, visibilityRuleService, page, tempSectionString);
+
+ if (!hasValue && paragraphPos > -1) {
+ mainDocumentPart.removeBodyElement(paragraphPos);
+ }
}
- });
+ }
}
- private void createCompositeFields(List
From c57e10a0332feb489d8599901cb601b9bb0d53a7 Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Tue, 6 Jul 2021 10:29:14 +0300
Subject: [PATCH 11/16] Fix issue with zenodo depositions
---
.../eu/eudat/logic/managers/DataManagementPlanManager.java | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
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 23b39d6b0..04968ac76 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
@@ -1,5 +1,6 @@
package eu.eudat.logic.managers;
+import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import eu.eudat.configurations.dynamicgrant.DynamicGrantConfiguration;
@@ -1997,7 +1998,9 @@ public class DataManagementPlanManager {
}
dataBuilder.append(" }\n").append("}");
createData = dataBuilder.toString();
- JsonNode createDataJSON = new ObjectMapper().readTree(createData);
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
+ JsonNode createDataJSON = mapper.readTree(createData);
HttpEntity request = new HttpEntity<>(createDataJSON, headers);
Map createResponse = null;
LinkedHashMap links = null;
From efe177f0b1a4d52c0e0aa6f7962e9e9915246e79 Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Tue, 6 Jul 2021 12:58:38 +0300
Subject: [PATCH 12/16] Fix issues with xml import and issues with zenodo
deposit
---
.../main/java/eu/eudat/controllers/DMPs.java | 2 +-
.../managers/DataManagementPlanManager.java | 32 ++++++++++++++----
.../models/rda/mapper/DatasetRDAMapper.java | 2 +-
.../models/rda/mapper/FundingRDAMapper.java | 12 +++++--
.../models/rda/mapper/ProjectRDAMapper.java | 33 ++++++++++++-------
5 files changed, 57 insertions(+), 24 deletions(-)
diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java
index f7f7b907c..a929458e7 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java
@@ -260,7 +260,7 @@ public class DMPs extends BaseController {
if (files[0].getContentType().equals(APPLICATION_JSON.toString())) {
this.dataManagementPlanManager.createFromRDA(files, principal, profiles);
} else if (files[0].getContentType().equals(APPLICATION_ATOM_XML.toString()) || files[0].getContentType().equals(TEXT_XML.toString())) {
- this.dataManagementPlanManager.createDmpFromXml(this.getApiContext(), files, principal);
+ this.dataManagementPlanManager.createDmpFromXml(files, principal, profiles);
} else {
return ResponseEntity.badRequest().body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("File format is not supported"));
}
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 04968ac76..14d618c79 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
@@ -1476,7 +1476,7 @@ public class DataManagementPlanManager {
* Data Import
* */
- public List createDmpFromXml(ApiContext apiContext, MultipartFile[] files, Principal principal) throws IOException, JAXBException, Exception {
+ public List createDmpFromXml(MultipartFile[] files, Principal principal, String[] profiles) throws IOException, JAXBException, Exception {
List dataManagementPlans = new ArrayList<>();
// Jaxb approach.
JAXBContext jaxbContext;
@@ -1532,16 +1532,26 @@ public class DataManagementPlanManager {
projectEditor.setExistProject(project);
List associatedProfiles = new LinkedList<>();
+ if (profiles != null && profiles.length > 0) {
+ for (String profile : profiles) {
+ DatasetProfile exProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(profile));
+ AssociatedProfile associatedProfile = new AssociatedProfile().fromData(exProfile);
+ associatedProfiles.add(associatedProfile);
+ }
+ }
+
for (AssociatedProfileImportModels a : dataManagementPlans.get(0).getProfilesImportModels()) {
- AssociatedProfile associatedProfile = new AssociatedProfile();
- associatedProfile.setId(a.getId());
- associatedProfile.setLabel(a.getLabel());
- associatedProfiles.add(associatedProfile);
+ try {
+ DatasetProfile exProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(a.getId());
+ AssociatedProfile associatedProfile = new AssociatedProfile().fromData(exProfile);
+ associatedProfiles.add(associatedProfile);
+ } catch (Exception ignored) {
+ }
}
List organisations = new ArrayList<>();
for (OrganisationImportModel org : dataManagementPlans.get(0).getOrganisationImportModels()) {
eu.eudat.models.data.dmp.Organisation organisation = new eu.eudat.models.data.dmp.Organisation();
- organisation.setLabel(org.getOrganaisationNameImport());
+ organisation.setName(org.getOrganaisationNameImport());
organisation.setReference(org.getOrganaisationReferenceImport());
organisation.setKey(organisation.getReference().split(":")[0]);
organisations.add(organisation);
@@ -1593,7 +1603,11 @@ public class DataManagementPlanManager {
for (DatasetImportModels das: dataManagementPlans.get(0).getDatasetImportModels()) {
eu.eudat.data.entities.Dataset dataset = new eu.eudat.data.entities.Dataset();
dataset.setLabel(das.getName());
- dataset.setProfile(databaseRepository.getDatasetProfileDao().find(das.getProfile()));
+ try {
+ dataset.setProfile(databaseRepository.getDatasetProfileDao().find(das.getProfile()));
+ } catch (Exception ignored) {
+ dataset.setProfile(databaseRepository.getDatasetProfileDao().find(associatedProfiles.get(0).getId()));
+ }
dataset.setProperties(new ObjectMapper().writeValueAsString(das.getFieldImportModels()));
dataset.setStatus((short) 0);
dataset.setRegistries(new HashSet<>());
@@ -1972,6 +1986,9 @@ public class DataManagementPlanManager {
i++;
}
dataBuilder.append("],\n");
+ if (dmp.getGrant().getReference() == null) {
+ dmp.getGrant().setReference("dmp:" + dmp.getGrant().getId());
+ }
String grantReferenceHead = dmp.getGrant().getReference().split(":")[0];
if (grantReferenceHead.equals("openaire")) {
String grantReferenceTail = dmp.getGrant().getReference().split(":")[3];
@@ -1980,6 +1997,7 @@ public class DataManagementPlanManager {
dataBuilder.append(" \"grants\": [{\n");
dataBuilder.append(" \t\t\"id\": \"").append(finalId).append("\"\n}],\n");
}
+
dataBuilder.append(" \"creators\": [{\n");
dataBuilder.append(" \t\t\"name\": \"").append(dmp.getUsers().stream().filter(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser().getName()).append("\",\n");
if (dmp.getOrganisations() != null && !dmp.getOrganisations().isEmpty()) {
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 d5161094d..3473fec6c 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
@@ -108,7 +108,7 @@ public class DatasetRDAMapper {
for (int i = 0; i < keywordNodes.size(); i++) {
rda.setAdditionalProperty("keyword" + (i + 1), keywordNodes.get(i).get("id").asText());
}
- } else {
+ } else if (apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().exists()) {
List tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags().stream().map(Tag::getName).collect(Collectors.toList());
rda.setKeyword(tags);
}
diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/FundingRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/FundingRDAMapper.java
index 8edba7ce4..cc31766f3 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/FundingRDAMapper.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/FundingRDAMapper.java
@@ -6,11 +6,13 @@ import eu.eudat.data.entities.Grant;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.models.rda.Funding;
+import javax.transaction.Transactional;
import java.util.Date;
import java.util.UUID;
public class FundingRDAMapper {
+ @Transactional
public static Funding toRDA(Grant grant) {
Funding rda = new Funding();
String referencePrefix;
@@ -22,9 +24,13 @@ public class FundingRDAMapper {
} else {
rda.setFunderId(FunderIdRDAMapper.toRDA(grant.getFunder().getId()));
}
- referencePrefix = grant.getReference().split(":")[0];
- shortReference = grant.getReference().substring(referencePrefix.length() + 1);
- rda.setGrantId(GrantIdRDAMapper.toRDA(shortReference));
+ if (grant.getReference() != null) {
+ referencePrefix = grant.getReference().split(":")[0];
+ shortReference = grant.getReference().substring(referencePrefix.length() + 1);
+ rda.setGrantId(GrantIdRDAMapper.toRDA(shortReference));
+ } else {
+ rda.setGrantId(GrantIdRDAMapper.toRDA(grant.getId().toString()));
+ }
return rda;
}
diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/ProjectRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/ProjectRDAMapper.java
index ba3f90383..0d33cda2b 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/ProjectRDAMapper.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/ProjectRDAMapper.java
@@ -4,25 +4,34 @@ import eu.eudat.data.entities.Funder;
import eu.eudat.data.entities.Grant;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.models.rda.Project;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import javax.transaction.Transactional;
import java.util.*;
public class ProjectRDAMapper {
+ private final static Logger logger = LoggerFactory.getLogger(ProjectRDAMapper.class);
+ @Transactional
public static Project toRDA(eu.eudat.data.entities.Project project, Grant grant) {
Project rda = new Project();
- rda.setTitle(project.getLabel());
- rda.setDescription(project.getDescription());
- if (project.getStartdate() != null) {
- rda.setStart(project.getStartdate().toString());
- }
- if (project.getEnddate() != null) {
- rda.setEnd(project.getEnddate().toString());
- }
- rda.setFunding(Collections.singletonList(FundingRDAMapper.toRDA(grant)));
-
- if (rda.getTitle() == null) {
- throw new IllegalArgumentException("Project Title is missing");
+ try {
+ rda.setTitle(project.getLabel());
+ rda.setDescription(project.getDescription());
+ if (project.getStartdate() != null) {
+ rda.setStart(project.getStartdate().toString());
+ }
+ if (project.getEnddate() != null) {
+ rda.setEnd(project.getEnddate().toString());
+ }
+ rda.setFunding(Collections.singletonList(FundingRDAMapper.toRDA(grant)));
+
+ if (rda.getTitle() == null) {
+ throw new IllegalArgumentException("Project Title is missing");
+ }
+ } catch (Exception e) {
+ logger.error(e.getLocalizedMessage(), e);
}
return rda;
From d5cd90814a6012cf4335c001851815a4e20e0f3d Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Tue, 6 Jul 2021 13:33:58 +0300
Subject: [PATCH 13/16] Improve error handling
---
.../web/src/main/java/eu/eudat/controllers/DMPs.java | 7 +------
.../eudat/logic/managers/DataManagementPlanManager.java | 9 +++++++--
.../java/eu/eudat/models/rda/mapper/DmpRDAMapper.java | 2 +-
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java
index a929458e7..b01dc68c9 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java
@@ -243,7 +243,6 @@ public class DMPs extends BaseController {
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).payload(cloneId));
}
- @Transactional
@RequestMapping(method = RequestMethod.DELETE, value = {"{id}"}, consumes = "application/json", produces = "application/json")
public @ResponseBody
ResponseEntity> delete(@PathVariable UUID id, Principal principal) {
@@ -279,7 +278,6 @@ public class DMPs extends BaseController {
}
}
- @Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/finalize/{id}"})
public ResponseEntity> makeFinalize(@PathVariable String id, Principal principal, @RequestBody DatasetsToBeFinalized datasetsToBeFinalized) {
try {
@@ -291,7 +289,6 @@ public class DMPs extends BaseController {
}
}
- @Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/unfinalize/{id}"})
public ResponseEntity> undoFinalize(@PathVariable String id, Principal principal) {
try {
@@ -304,7 +301,6 @@ public class DMPs extends BaseController {
}
- @Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/updateusers/{id}"})
public ResponseEntity> updateUsers(@PathVariable String id, @RequestBody List users, Principal principal) {
try {
@@ -320,7 +316,6 @@ public class DMPs extends BaseController {
* DOI Generation
* */
- @Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/createZenodoDoi/{id}"})
public ResponseEntity> createZenodoDoi(@PathVariable String id, Principal principal) {
try {
@@ -328,7 +323,7 @@ public class DMPs extends BaseController {
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully created DOI for Data Datamanagement Plan in question.").payload(zenodoDOI));
} catch (Exception e) {
logger.error(e.getMessage(), e);
- return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to create DOI for the Data Management Plan."));
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to create DOI for the Data Management Plan: " + e.getMessage()));
}
}
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 14d618c79..2ab542edd 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
@@ -1407,7 +1407,7 @@ public class DataManagementPlanManager {
return fileEnvelope;
}
- public ResponseEntity getRDAJsonDocument(String id, DatasetManager datasetManager, Principal principal) throws IOException {
+ public ResponseEntity getRDAJsonDocument(String id, DatasetManager datasetManager, Principal principal) throws Exception {
eu.eudat.data.entities.DMP dmp = databaseRepository.getDmpDao().find(UUID.fromString(id));
if (!dmp.isPublic() && dmp.getUsers().stream().noneMatch(userInfo -> userInfo.getUser().getId() == principal.getId()))
throw new UnauthorisedException();
@@ -2091,7 +2091,12 @@ public class DataManagementPlanManager {
restTemplate.put(addFileUrl, addFileMapRequest);
Files.deleteIfExists(file.getFile().toPath());
- ResponseEntity jsonFile = getRDAJsonDocument(id.toString(), datasetManager, principal);
+ ResponseEntity jsonFile;
+ try {
+ jsonFile = getRDAJsonDocument(id.toString(), datasetManager, principal);
+ } catch (Exception e) {
+ throw e;
+ }
UUID jsonFileUUID = UUID.randomUUID();
File tempJsonFile = new File(this.environment.getProperty("temp.temp") + jsonFileUUID.toString() + ".json");
try (FileOutputStream jsonFos = new FileOutputStream(tempJsonFile)) {
diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java
index 5bd15e34d..075b3796a 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java
@@ -36,7 +36,7 @@ public class DmpRDAMapper {
}
Map extraProperties;
if (dmp.getExtraProperties() == null) {
- throw new IllegalArgumentException("DMP is missing required Data for RDA export");
+ throw new IllegalArgumentException("DMP is missing language and contact properties");
} else {
extraProperties = new org.json.JSONObject(dmp.getExtraProperties()).toMap();
if (extraProperties.get("language") == null) {
From 1c22ed2321f42e458abee462dd0740bee1ec9b7f Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Tue, 6 Jul 2021 16:33:46 +0300
Subject: [PATCH 14/16] Add extraProperties for xml export/import and restore
pdf export for zenodo deposit
---
.../managers/DataManagementPlanManager.java | 39 +++++++++++++++++--
.../eudat/models/data/dmp/DmpImportModel.java | 37 ++++++++++++++++++
2 files changed, 72 insertions(+), 4 deletions(-)
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 2ab542edd..b7f04db20 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
@@ -1292,6 +1292,22 @@ public class DataManagementPlanManager {
dmpName.setTextContent(dmp.getLabel());
dmpElement.appendChild(dmpName);
+ if (dmp.getExtraProperties() != null && !dmp.getExtraProperties().isEmpty()) {
+ Map extraProperties = new ObjectMapper().readValue(dmp.getExtraProperties(), HashMap.class);
+ Element language = xmlDoc.createElement("language");
+ language.setTextContent(extraProperties.get("language") != null ? extraProperties.get("language").toString() : null);
+ dmpElement.appendChild(language);
+ Element visibility = xmlDoc.createElement("visibility");
+ visibility.setTextContent(extraProperties.get("visible") != null ? extraProperties.get("visible").toString() : null);
+ dmpElement.appendChild(visibility);
+ Element publicDate = xmlDoc.createElement("publicDate");
+ publicDate.setTextContent(extraProperties.get("publicDate") != null ? extraProperties.get("publicDate").toString() : null);
+ dmpElement.appendChild(publicDate);
+ Element costs = xmlDoc.createElement("costs");
+ costs.setTextContent(extraProperties.get("costs") != null ? extraProperties.get("costs").toString() : null);
+ dmpElement.appendChild(costs);
+ }
+
DMPProfile dmpProfile = dmp.getProfile();
Element dmpProfileElement = xmlDoc.createElement("dmpProfile");
Element dmpProfileName = xmlDoc.createElement("dmpProfileName");
@@ -1580,6 +1596,21 @@ public class DataManagementPlanManager {
dm.setAssociatedUsers(associatedUsers); // Sets associatedUsers property.
dm.setDynamicFields(dynamicFields); // Sets dynamicFields property.
dm.setDefinition(dmpProfile);
+ ObjectMapper mapper = new ObjectMapper();
+ Map extraPropertiesMap = new HashMap<>();
+ if (dataManagementPlans.get(0).getLanguage() != null) {
+ extraPropertiesMap.put("language", dataManagementPlans.get(0).getLanguage());
+ }
+ if (dataManagementPlans.get(0).getVisibility() != null) {
+ extraPropertiesMap.put("visible", dataManagementPlans.get(0).getVisibility());
+ }
+ if (dataManagementPlans.get(0).getPublicDate() != null) {
+ extraPropertiesMap.put("publicDate", dataManagementPlans.get(0).getPublicDate());
+ }
+ if (dataManagementPlans.get(0).getCosts() != null) {
+ extraPropertiesMap.put("costs", mapper.readValue(dataManagementPlans.get(0).getCosts(), ArrayList.class));
+ }
+ dm.setExtraProperties(extraPropertiesMap);
//createOrUpdate(apiContext, dm, principal);
DMP dmp = this.createOrUpdate(dm, principal);
@@ -2081,13 +2112,13 @@ public class DataManagementPlanManager {
if (unpublishedUrl == null) {
// Second step, add the file to the entry.
FileEnvelope file = getWordDocument(id.toString(), principal, configLoader);
- /*String name = file.getFilename().substring(0, file.getFilename().length() - 5);
+ String name = file.getFilename().substring(0, file.getFilename().length() - 5);
File pdfFile = datasetManager.convertToPDF(file, environment);
- String fileName = name + ".pdf";*/
- FileSystemResource fileSystemResource = new FileSystemResource(file.getFile());
+ String fileName = name + ".pdf";
+ FileSystemResource fileSystemResource = new FileSystemResource(pdfFile);
HttpEntity addFileMapRequest = new HttpEntity<>(fileSystemResource, null);
- String addFileUrl = links.get("bucket") + "/" + file.getFilename() + "?access_token=" + zenodoToken;
+ String addFileUrl = links.get("bucket") + "/" + fileName + "?access_token=" + zenodoToken;
restTemplate.put(addFileUrl, addFileMapRequest);
Files.deleteIfExists(file.getFile().toPath());
diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DmpImportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DmpImportModel.java
index 699e73fa3..231565c73 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DmpImportModel.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DmpImportModel.java
@@ -19,6 +19,10 @@ public class DmpImportModel {
private List associatedUsersImportModels;
private List dynamicFieldsImportModels;
private List datasetImportModels;
+ private String language;
+ private Boolean visibility;
+ private String publicDate;
+ private String costs;
@XmlElement(name = "description")
public String getDescriptionImport() {
@@ -113,4 +117,37 @@ public class DmpImportModel {
@XmlElement(name = "dataset")
public List getDatasetImportModels() { return datasetImportModels; }
public void setDatasetImportModels(List datasetImportModels) { this.datasetImportModels = datasetImportModels; }
+
+ @XmlElement(name = "language")
+ public String getLanguage() {
+ return language;
+ }
+
+ public void setLanguage(String language) {
+ this.language = language;
+ }
+ @XmlElement(name = "visibility")
+ public Boolean getVisibility() {
+ return visibility;
+ }
+
+ public void setVisibility(Boolean visibility) {
+ this.visibility = visibility;
+ }
+ @XmlElement(name = "publicDate")
+ public String getPublicDate() {
+ return publicDate;
+ }
+
+ public void setPublicDate(String publicDate) {
+ this.publicDate = publicDate;
+ }
+ @XmlElement(name = "costs")
+ public String getCosts() {
+ return costs;
+ }
+
+ public void setCosts(String costs) {
+ this.costs = costs;
+ }
}
From d603fed61f724f98a2a5d978012b8a35af9d9d3c Mon Sep 17 00:00:00 2001
From: George Kalampokis
Date: Tue, 6 Jul 2021 16:56:37 +0300
Subject: [PATCH 15/16] When new version is made keep all it's contributors
---
.../logic/managers/DataManagementPlanManager.java | 10 ++++++++++
1 file changed, 10 insertions(+)
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 b7f04db20..5a070671b 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
@@ -632,6 +632,16 @@ public class DataManagementPlanManager {
copyDatasets(newDmp, databaseRepository.getDatasetDao());
+ databaseRepository
+ .getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), oldDmp.getId()))
+ .toList().stream().forEach(userDMP -> {
+ UserDMP temp = new UserDMP();
+ temp.setUser(userDMP.getUser());
+ temp.setRole(userDMP.getRole());
+ temp.setDmp(newDmp);
+ apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(temp);
+ });
+
newDmp.setUsers(new HashSet<>(databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), newDmp.getId())).toList()));
DatasetCriteria criteria1 = new DatasetCriteria();
From 6e21ad127d2a99bac89b8f73a81f1b3e4237dd92 Mon Sep 17 00:00:00 2001
From: Kristan Ntavidi
Date: Wed, 7 Jul 2021 08:17:48 +0300
Subject: [PATCH 16/16] Language Pt fix
---
dmp-frontend/src/app/ui/dashboard/dashboard.component.html | 2 +-
dmp-frontend/src/assets/i18n/de.json | 1 +
dmp-frontend/src/assets/i18n/en.json | 1 +
dmp-frontend/src/assets/i18n/es.json | 1 +
dmp-frontend/src/assets/i18n/gr.json | 1 +
dmp-frontend/src/assets/i18n/pt.json | 3 ++-
dmp-frontend/src/assets/i18n/sk.json | 1 +
dmp-frontend/src/assets/i18n/sr.json | 1 +
dmp-frontend/src/assets/i18n/tr.json | 1 +
9 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/dmp-frontend/src/app/ui/dashboard/dashboard.component.html b/dmp-frontend/src/app/ui/dashboard/dashboard.component.html
index ed8022f1a..61b9e8242 100644
--- a/dmp-frontend/src/app/ui/dashboard/dashboard.component.html
+++ b/dmp-frontend/src/app/ui/dashboard/dashboard.component.html
@@ -13,7 +13,7 @@
{{'DASHBOARD.NEW-QUESTION' | translate}} {{'DASHBOARD.OPEN-AIR-GUIDE' | translate}} {{'DASHBOARD.LEARN-MORE' | translate}}
{{'DASHBOARD.DMP-ABOUT-BEG' | translate}}
- {{'DASHBOARD.DATASET-DESCRIPTIONS' | translate}}
+ {{'DASHBOARD.DATASET-DESCRIPTIONS-DASHBOARD-TEXT' | translate}}
{{'DASHBOARD.DMP-ABOUT-END' | translate}}
diff --git a/dmp-frontend/src/assets/i18n/de.json b/dmp-frontend/src/assets/i18n/de.json
index de68aea86..cb8b5da50 100644
--- a/dmp-frontend/src/assets/i18n/de.json
+++ b/dmp-frontend/src/assets/i18n/de.json
@@ -1541,6 +1541,7 @@
"PERSONAL-USAGE": "Personal Usage",
"PUBLIC-USAGE": "Public Usage",
"DATASET-DESCRIPTIONS": "Datasets",
+ "DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Datasets",
"PUBLIC-DMPS": "Public DMPs",
"PUBLIC-DATASETS": "Public Datasets",
"RELATED-ORGANISATIONS": "Related Organisations",
diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json
index b5fad029c..60e3e4bd3 100644
--- a/dmp-frontend/src/assets/i18n/en.json
+++ b/dmp-frontend/src/assets/i18n/en.json
@@ -1541,6 +1541,7 @@
"PERSONAL-USAGE": "Personal Usage",
"PUBLIC-USAGE": "Public Usage",
"DATASET-DESCRIPTIONS": "Datasets",
+ "DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Datasets",
"PUBLIC-DMPS": "Public DMPs",
"PUBLIC-DATASETS": "Public Datasets",
"RELATED-ORGANISATIONS": "Related Organisations",
diff --git a/dmp-frontend/src/assets/i18n/es.json b/dmp-frontend/src/assets/i18n/es.json
index 9afc8a2df..ac861ed3a 100644
--- a/dmp-frontend/src/assets/i18n/es.json
+++ b/dmp-frontend/src/assets/i18n/es.json
@@ -1541,6 +1541,7 @@
"PERSONAL-USAGE": "Uso personal",
"PUBLIC-USAGE": "Public Usage",
"DATASET-DESCRIPTIONS": "Descripciones de los datasets",
+ "DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Descripciones de los datasets",
"PUBLIC-DMPS": "Public DMPs",
"PUBLIC-DATASETS": "Public Dataset Descriptions",
"RELATED-ORGANISATIONS": "Organizaciones relacionadas",
diff --git a/dmp-frontend/src/assets/i18n/gr.json b/dmp-frontend/src/assets/i18n/gr.json
index fe7d9e632..ee4741459 100644
--- a/dmp-frontend/src/assets/i18n/gr.json
+++ b/dmp-frontend/src/assets/i18n/gr.json
@@ -1541,6 +1541,7 @@
"PERSONAL-USAGE": "Προσωπική Χρήση",
"PUBLIC-USAGE": "Δημόσια Χρήση",
"DATASET-DESCRIPTIONS": "Περιγραφές Συνόλου Δεδομένων",
+ "DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Περιγραφές Συνόλου Δεδομένων",
"PUBLIC-DMPS": "Δημόσια Σχέδια Διαχείρισης Δεδομένων",
"PUBLIC-DATASETS": "Δημόσιες Περιγραφές Συνόλου Δεδομένων",
"RELATED-ORGANISATIONS": "Σχετικοί Οργανισμοί",
diff --git a/dmp-frontend/src/assets/i18n/pt.json b/dmp-frontend/src/assets/i18n/pt.json
index ebcdb3037..830471d29 100644
--- a/dmp-frontend/src/assets/i18n/pt.json
+++ b/dmp-frontend/src/assets/i18n/pt.json
@@ -1540,7 +1540,8 @@
"DATA-MANAGEMENT-PLANS": "PLANOS DE GESTÃO DE DADOS",
"PERSONAL-USAGE": "Uso Pessoal",
"PUBLIC-USAGE": "Uso Público",
- "DATASET-DESCRIPTIONS": "",
+ "DATASET-DESCRIPTIONS": "Datasets",
+ "DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "",
"PUBLIC-DMPS": "PGDs Públicos",
"PUBLIC-DATASETS": "Datasets Públicos",
"RELATED-ORGANISATIONS": "Organizações Relacionadas",
diff --git a/dmp-frontend/src/assets/i18n/sk.json b/dmp-frontend/src/assets/i18n/sk.json
index d336fe640..3ee09b999 100644
--- a/dmp-frontend/src/assets/i18n/sk.json
+++ b/dmp-frontend/src/assets/i18n/sk.json
@@ -1541,6 +1541,7 @@
"PERSONAL-USAGE": "Osobné použitie",
"PUBLIC-USAGE": "Verejné použitie",
"DATASET-DESCRIPTIONS": "Súbory dát",
+ "DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Súbory dát",
"PUBLIC-DMPS": "Verejné DMP",
"PUBLIC-DATASETS": "Verejné súbory dát",
"RELATED-ORGANISATIONS": "Ďalšie organizácie",
diff --git a/dmp-frontend/src/assets/i18n/sr.json b/dmp-frontend/src/assets/i18n/sr.json
index 153a8eba8..490455dec 100644
--- a/dmp-frontend/src/assets/i18n/sr.json
+++ b/dmp-frontend/src/assets/i18n/sr.json
@@ -1541,6 +1541,7 @@
"PERSONAL-USAGE": "Lična upotreba",
"PUBLIC-USAGE": "Javna upotreba",
"DATASET-DESCRIPTIONS": "Skupovi podataka",
+ "DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Skupovi podataka",
"PUBLIC-DMPS": "Javno dostupni Planovi",
"PUBLIC-DATASETS": "Javno dostupni skupovi podataka",
"RELATED-ORGANISATIONS": "Povezane institucije",
diff --git a/dmp-frontend/src/assets/i18n/tr.json b/dmp-frontend/src/assets/i18n/tr.json
index 14378e788..6083b7189 100644
--- a/dmp-frontend/src/assets/i18n/tr.json
+++ b/dmp-frontend/src/assets/i18n/tr.json
@@ -1541,6 +1541,7 @@
"PERSONAL-USAGE": "Kişisel Kullanım",
"PUBLIC-USAGE": "Genel Kullanım",
"DATASET-DESCRIPTIONS": "Veri Setleri",
+ "DATASET-DESCRIPTIONS-DASHBOARD-TEXT": "Veri Setleri",
"PUBLIC-DMPS": "Herkese açık VYP'ler",
"PUBLIC-DATASETS": "Herkese açık Veri Setleri",
"RELATED-ORGANISATIONS": "Bağlantılı Kurumlar",