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 6e862df5f..f34c2ec8a 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 @@ -39,103 +39,115 @@ public class DatasetRepository extends ElasticRepository query(DatasetCriteria criteria) throws IOException { - SearchRequest searchRequest = new SearchRequest("datasets"); - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + if (this.getClient() != null) { + SearchRequest searchRequest = new SearchRequest("datasets"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - CountRequest countRequest = new CountRequest("datasets"); - countRequest.query(QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("status.keyword", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList())))); - CountResponse countResponse = getClient().count(countRequest, RequestOptions.DEFAULT); - Long count = countResponse.getCount(); + CountRequest countRequest = new CountRequest("datasets"); + countRequest.query(QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("status.keyword", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList())))); + CountResponse countResponse = getClient().count(countRequest, RequestOptions.DEFAULT); + Long count = countResponse.getCount(); - searchSourceBuilder.size(count.intValue()); + searchSourceBuilder.size(count.intValue()); - BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("status.keyword", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList()))); - if (criteria.isPublic()) { - boolQuery = boolQuery.should(QueryBuilders.termQuery("public.keyword", "true")); - boolQuery = boolQuery.should(QueryBuilders.termQuery("status.keyword", Dataset.Status.FINALISED.getValue())); - boolQuery = boolQuery.should(QueryBuilders.termQuery("lastPublicVersion.keyword", "true")); - } - if (criteria.getLike() != null && !criteria.getLike().isEmpty()) { - boolQuery = boolQuery.should(QueryBuilders.queryStringQuery(criteria.getLike()).fields(Stream.of(new Object[][] { - { "label", 1.0f }, - { "description", 1.0f }, - { "formData", 1.0f } - }).collect(Collectors.toMap(data -> (String) data[0], data -> (Float) data[1])))); - } - - if (criteria.getDatasetTemplates() != null && criteria.getDatasetTemplates().size() > 0) { - boolQuery = boolQuery.should(QueryBuilders.termsQuery("template.keyword", criteria.getDatasetTemplates().stream().map(UUID::toString).collect(Collectors.toList()))); - } - - if (criteria.getStatus() != null) { - boolQuery = boolQuery.should(QueryBuilders.termQuery("status.keyword", criteria.getStatus().toString())); - } - - if (criteria.getDmps() != null && criteria.getDmps().size() > 0) { - boolQuery = boolQuery.should(QueryBuilders.termsQuery("dmp.keyword", criteria.getDmps().stream().map(UUID::toString).collect(Collectors.toList()))); - } - - if (criteria.getGroupIds() != null && criteria.getGroupIds().size() > 0) { - boolQuery = boolQuery.should(QueryBuilders.termsQuery("group.keyword", criteria.getGroupIds().stream().map(UUID::toString).collect(Collectors.toList()))); - } - - if (criteria.getGrants() != null && criteria.getGrants().size() > 0) { - boolQuery = boolQuery.should(QueryBuilders.termsQuery("grant.keyword", criteria.getGrants().stream().map(UUID::toString).collect(Collectors.toList()))); - } - - if (criteria.getGrantStatus() != null) { - boolQuery = boolQuery.should(QueryBuilders.termQuery("grantStatus.keyword", criteria.getGrantStatus().toString())); - } - - if (criteria.getCollaborators() != null && criteria.getCollaborators().size() > 0) { - boolQuery = boolQuery.should(QueryBuilders.termsQuery("collaborators.id.keyword", criteria.getCollaborators().stream().map(UUID::toString).collect(Collectors.toList()))); - } - - if (!criteria.isPublic()) { - if (criteria.getAllowAllVersions() != null && !criteria.getAllowAllVersions()) { - boolQuery = boolQuery.should(QueryBuilders.termQuery("lastVersion.keyword", "true")); + BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("status.keyword", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList()))); + if (criteria.isPublic()) { + boolQuery = boolQuery.should(QueryBuilders.termQuery("public.keyword", "true")); + boolQuery = boolQuery.should(QueryBuilders.termQuery("status.keyword", Dataset.Status.FINALISED.getValue())); + boolQuery = boolQuery.should(QueryBuilders.termQuery("lastPublicVersion.keyword", "true")); + } + if (criteria.getLike() != null && !criteria.getLike().isEmpty()) { + boolQuery = boolQuery.should(QueryBuilders.queryStringQuery(criteria.getLike()).fields(Stream.of(new Object[][]{ + {"label", 1.0f}, + {"description", 1.0f}, + {"formData", 1.0f} + }).collect(Collectors.toMap(data -> (String) data[0], data -> (Float) data[1])))); } - } - if (criteria.getOrganiztions() != null && criteria.getOrganiztions().size() > 0) { - boolQuery = boolQuery.should(QueryBuilders.termsQuery("organizations.id.keyword", criteria.getOrganiztions())); - } + if (criteria.getDatasetTemplates() != null && criteria.getDatasetTemplates().size() > 0) { + boolQuery = boolQuery.should(QueryBuilders.termsQuery("template.keyword", criteria.getDatasetTemplates().stream().map(UUID::toString).collect(Collectors.toList()))); + } - if (criteria.getTags() != null && criteria.getTags().size() > 0) { - boolQuery = boolQuery.should(QueryBuilders.termsQuery("tags.name.keyword", criteria.getTags().stream().map(Tag::getName).collect(Collectors.toList()))); - } + if (criteria.getStatus() != null) { + boolQuery = boolQuery.should(QueryBuilders.termQuery("status.keyword", criteria.getStatus().toString())); + } - if (boolQuery.should().isEmpty() && boolQuery.mustNot().isEmpty()) { - boolQuery.should(QueryBuilders.matchAllQuery()); - } else { - boolQuery.minimumShouldMatch(boolQuery.should().size()); + if (criteria.getDmps() != null && criteria.getDmps().size() > 0) { + boolQuery = boolQuery.should(QueryBuilders.termsQuery("dmp.keyword", criteria.getDmps().stream().map(UUID::toString).collect(Collectors.toList()))); + } + + if (criteria.getGroupIds() != null && criteria.getGroupIds().size() > 0) { + boolQuery = boolQuery.should(QueryBuilders.termsQuery("group.keyword", criteria.getGroupIds().stream().map(UUID::toString).collect(Collectors.toList()))); + } + + if (criteria.getGrants() != null && criteria.getGrants().size() > 0) { + boolQuery = boolQuery.should(QueryBuilders.termsQuery("grant.keyword", criteria.getGrants().stream().map(UUID::toString).collect(Collectors.toList()))); + } + + if (criteria.getGrantStatus() != null) { + boolQuery = boolQuery.should(QueryBuilders.termQuery("grantStatus.keyword", criteria.getGrantStatus().toString())); + } + + if (criteria.getCollaborators() != null && criteria.getCollaborators().size() > 0) { + boolQuery = boolQuery.should(QueryBuilders.termsQuery("collaborators.id.keyword", criteria.getCollaborators().stream().map(UUID::toString).collect(Collectors.toList()))); + } + + if (!criteria.isPublic()) { + if (criteria.getAllowAllVersions() != null && !criteria.getAllowAllVersions()) { + boolQuery = boolQuery.should(QueryBuilders.termQuery("lastVersion.keyword", "true")); + } + } + + if (criteria.getOrganiztions() != null && criteria.getOrganiztions().size() > 0) { + boolQuery = boolQuery.should(QueryBuilders.termsQuery("organizations.id.keyword", criteria.getOrganiztions())); + } + + if (criteria.getTags() != null && criteria.getTags().size() > 0) { + boolQuery = boolQuery.should(QueryBuilders.termsQuery("tags.name.keyword", criteria.getTags().stream().map(Tag::getName).collect(Collectors.toList()))); + } + + if (boolQuery.should().isEmpty() && boolQuery.mustNot().isEmpty()) { + boolQuery.should(QueryBuilders.matchAllQuery()); + } else { + boolQuery.minimumShouldMatch(boolQuery.should().size()); + } + searchSourceBuilder.query(boolQuery); + searchRequest.source(searchSourceBuilder); + SearchResponse response = this.getClient().search(searchRequest, RequestOptions.DEFAULT); + return Arrays.stream(response.getHits().getHits()).map(x -> this.transformFromString(x.getSourceAsString(), Dataset.class)).collect(Collectors.toList()); } - searchSourceBuilder.query(boolQuery); - searchRequest.source(searchSourceBuilder); - SearchResponse response = this.getClient().search(searchRequest, RequestOptions.DEFAULT); - return Arrays.stream(response.getHits().getHits()).map(x -> this.transformFromString(x.getSourceAsString(), Dataset.class)).collect(Collectors.toList()); + return null; } @Override public boolean exists() throws IOException { - GetIndexRequest request = new GetIndexRequest("datasets"); + if (this.getClient() != null) { + GetIndexRequest request = new GetIndexRequest("datasets"); // request.indices("datasets"); - return this.getClient().indices().exists(request, RequestOptions.DEFAULT); + return this.getClient().indices().exists(request, RequestOptions.DEFAULT); + } + return false; } @Override 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 8447c772c..754fd1966 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 @@ -40,90 +40,102 @@ public class DmpRepository extends ElasticRepository { @Override public Dmp createOrUpdate(Dmp entity) throws IOException { - XContentBuilder builder = XContentFactory.jsonBuilder(); - IndexRequest request = new IndexRequest("dmps").id(entity.getId().toString()).source(entity.toElasticEntity(builder)); - IndexResponse response = this.getClient().index(request, RequestOptions.DEFAULT); - return entity; + if (this.getClient() != null) { + XContentBuilder builder = XContentFactory.jsonBuilder(); + IndexRequest request = new IndexRequest("dmps").id(entity.getId().toString()).source(entity.toElasticEntity(builder)); + IndexResponse response = this.getClient().index(request, RequestOptions.DEFAULT); + return entity; + } + return null; } @Override public Dmp findDocument(String id) throws IOException { - GetRequest request = new GetRequest("dmps",id); - GetResponse response = this.getClient().get(request, RequestOptions.DEFAULT); - return new Dmp().fromElasticEntity(response.getSourceAsMap()); + if (this.getClient() != null) { + GetRequest request = new GetRequest("dmps", id); + GetResponse response = this.getClient().get(request, RequestOptions.DEFAULT); + return new Dmp().fromElasticEntity(response.getSourceAsMap()); + } + return null; } @Override public List query(DmpCriteria criteria) throws IOException { - SearchRequest searchRequest = new SearchRequest("dmps"); - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + if (this.getClient() != null) { + SearchRequest searchRequest = new SearchRequest("dmps"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - CountRequest countRequest = new CountRequest("dmps"); - countRequest.query(QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(Dmp.MapKey.STATUS.getName(), Collections.singletonList(Dmp.DMPStatus.DELETED.getValue())))); - CountResponse countResponse = getClient().count(countRequest, RequestOptions.DEFAULT); - Long count = countResponse.getCount(); + CountRequest countRequest = new CountRequest("dmps"); + countRequest.query(QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(Dmp.MapKey.STATUS.getName(), Collections.singletonList(Dmp.DMPStatus.DELETED.getValue())))); + CountResponse countResponse = getClient().count(countRequest, RequestOptions.DEFAULT); + Long count = countResponse.getCount(); - searchSourceBuilder.size(count.intValue()); + searchSourceBuilder.size(count.intValue()); - 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())); + 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() + ".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()); + } + searchSourceBuilder.query(boolQuery); + 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()); } - 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() + ".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()); - } - searchSourceBuilder.query(boolQuery); - 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()); + return null; } @Override public boolean exists() throws IOException { - GetIndexRequest request = new GetIndexRequest("dmps"); - return this.getClient().indices().exists(request, RequestOptions.DEFAULT); + if (this.getClient() != null) { + GetIndexRequest request = new GetIndexRequest("dmps"); + return this.getClient().indices().exists(request, RequestOptions.DEFAULT); + } + return false; } @Override diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java index aca4d8dea..11c7d1bca 100644 --- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java +++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.elastic.criteria.Criteria; import eu.eudat.elastic.entities.ElasticEntity; import org.elasticsearch.client.Client; +import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.slf4j.Logger; @@ -23,7 +24,14 @@ public abstract class ElasticRepository T transformFromString(String value, Class tClass) { 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 af0f0d226..c8bc4928d 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 @@ -720,13 +720,17 @@ public class DataManagementPlanManager { assignFunderUserIfInternal(newDmp, user); assignProjectUserIfInternal(newDmp, user); databaseRepository.getGrantDao().createOrUpdate(newDmp.getGrant()); - newDmp = databaseRepository.getDmpDao().createOrUpdate(newDmp); + DMP tempDmp = databaseRepository.getDmpDao().createOrUpdate(newDmp); + newDmp.setId(tempDmp.getId()); // Assign creator. assignUser(newDmp, user); copyDatasets(newDmp, databaseRepository.getDatasetDao()); + newDmp.getUsers().clear(); + newDmp.setUsers(new HashSet<>(databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), newDmp.getId())).toList())); + this.updateIndex(newDmp); } else { throw new DMPNewVersionException("Version to update not the latest."); @@ -780,7 +784,11 @@ public class DataManagementPlanManager { apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria1).toList().forEach(dmp -> { for (Dataset dataset: dmp.getDataset()) { try { - List tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags(); + List tags = new ArrayList<>(); + eu.eudat.elastic.entities.Dataset elastic = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()); + if (elastic != null) { + tags = elastic.getTags(); + } this.datasetManager.updateTags(dataset, tags); } catch (Exception e) { logger.error(e.getMessage(), e); @@ -930,7 +938,11 @@ public class DataManagementPlanManager { .thenApplyAsync(entityDataset -> { Dataset newDataset = new Dataset(); try { - List tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags(); + List tags = new ArrayList<>(); + eu.eudat.elastic.entities.Dataset elastic = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()); + if (elastic != null) { + tags = elastic.getTags(); + } this.datasetManager.updateTags(dataset, tags); } catch (Exception e) { logger.error(e.getMessage(), e); @@ -1017,7 +1029,10 @@ public class DataManagementPlanManager { datasetElastic.setGrantStatus(dataset1.getDmp().getGrant().getStatus()); try { - datasetElastic.setTags(apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags()); + eu.eudat.elastic.entities.Dataset oldDatasetElastic = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()); + if (oldDatasetElastic != null) { + datasetElastic.setTags(oldDatasetElastic.getTags()); + } datasetElastic.setFormData(this.datasetManager.getWordDocumentText(dataset1)); apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().createOrUpdate(datasetElastic); } catch (Exception e) { @@ -1413,7 +1428,11 @@ public class DataManagementPlanManager { } dmp.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmp.getId())).toList())); try { - List tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags(); + List tags = new ArrayList<>(); + eu.eudat.elastic.entities.Dataset elastic = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()); + if (elastic != null) { + tags = elastic.getTags(); + } datasetManager.updateTags(dataset, tags); } catch (Exception e) { logger.error(e.getMessage(), e); @@ -1455,7 +1474,11 @@ public class DataManagementPlanManager { apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria).toList().stream().forEach(dmp1 -> { dmp1.getDataset().forEach(dataset -> { try { - List tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags(); + List tags = new ArrayList<>(); + eu.eudat.elastic.entities.Dataset elastic = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()); + if (elastic != null) { + tags = elastic.getTags(); + } this.datasetManager.updateTags(dataset, tags); } catch (Exception e) { logger.error(e.getMessage(), e); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java index 6094951ef..b989d0153 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java @@ -52,9 +52,9 @@ public class DatasetWizardManager { Dataset oldDataset = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().find(uuid); eu.eudat.elastic.entities.Dataset oldDatasetElasitc = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(uuid.toString()); oldDataset.setStatus(Dataset.Status.DELETED.getValue()); - oldDatasetElasitc.setStatus(oldDataset.getStatus()); apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(oldDataset); - if (uuid != null && oldDatasetElasitc.getId()!= null) { + if (oldDatasetElasitc != null && uuid != null && oldDatasetElasitc.getId()!= null) { + oldDatasetElasitc.setStatus(oldDataset.getStatus()); apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().createOrUpdate(oldDatasetElasitc); } } 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 c9a3723f0..c15de6329 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 @@ -26,7 +26,8 @@ public class DatasetMapper { public Dataset toElastic(eu.eudat.data.entities.Dataset dataset, List tags) throws Exception { Dataset elastic = new Dataset(); - elastic.setId(dataset.getId().toString()); + eu.eudat.data.entities.Dataset tempDataset = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().find(dataset.getId()); + elastic.setId(tempDataset.getId().toString()); if (tags != null && !tags.isEmpty()) { DatasetCriteria criteria = new DatasetCriteria(); criteria.setTags(tags); @@ -39,35 +40,35 @@ public class DatasetMapper { elastic.setTags(tags1); } } - elastic.setLabel(dataset.getLabel()); - elastic.setDescription(dataset.getDescription()); - elastic.setTemplate(dataset.getProfile().getId()); - elastic.setStatus(dataset.getStatus()); - elastic.setDmp(dataset.getDmp().getId()); - elastic.setGroup(dataset.getDmp().getGroupId()); - elastic.setGrant(dataset.getDmp().getGrant().getId()); - if (dataset.getDmp().getUsers() != null) { - elastic.setCollaborators(dataset.getDmp().getUsers().stream().map(user -> CollaboratorMapper.toElastic(user.getUser())).collect(Collectors.toList())); + elastic.setLabel(tempDataset.getLabel()); + elastic.setDescription(tempDataset.getDescription()); + elastic.setTemplate(tempDataset.getProfile().getId()); + elastic.setStatus(tempDataset.getStatus()); + elastic.setDmp(tempDataset.getDmp().getId()); + elastic.setGroup(tempDataset.getDmp().getGroupId()); + elastic.setGrant(tempDataset.getDmp().getGrant().getId()); + if (tempDataset.getDmp().getUsers() != null) { + elastic.setCollaborators(tempDataset.getDmp().getUsers().stream().map(user -> CollaboratorMapper.toElastic(user.getUser())).collect(Collectors.toList())); } DataManagementPlanCriteria dmpCriteria = new DataManagementPlanCriteria(); dmpCriteria.setAllVersions(true); - dmpCriteria.setGroupIds(Collections.singletonList(dataset.getDmp().getGroupId())); + dmpCriteria.setGroupIds(Collections.singletonList(tempDataset.getDmp().getGroupId())); apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(dmpCriteria).toList().stream() - .max(Comparator.comparing(DMP::getVersion)).ifPresent(dmp -> elastic.setLastVersion(dmp.getId().equals(dataset.getDmp().getId()))); + .max(Comparator.comparing(DMP::getVersion)).ifPresent(dmp -> elastic.setLastVersion(dmp.getId().equals(tempDataset.getDmp().getId()))); apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(dmpCriteria).toList().stream().filter(DMP::isPublic) - .max(Comparator.comparing(DMP::getVersion)).ifPresent(dmp -> elastic.setLastPublicVersion(dmp.getId().equals(dataset.getDmp().getId()))); + .max(Comparator.comparing(DMP::getVersion)).ifPresent(dmp -> elastic.setLastPublicVersion(dmp.getId().equals(tempDataset.getDmp().getId()))); if (elastic.getLastVersion() == null) { elastic.setLastVersion(true); } if (elastic.getLastPublicVersion() == null) { elastic.setLastPublicVersion(false); } - if (dataset.getDmp().getOrganisations() != null) { - elastic.setOrganizations(dataset.getDmp().getOrganisations().stream().map(OrganizationMapper::toElastic).collect(Collectors.toList())); + if (tempDataset.getDmp().getOrganisations() != null) { + elastic.setOrganizations(tempDataset.getDmp().getOrganisations().stream().map(OrganizationMapper::toElastic).collect(Collectors.toList())); } - elastic.setPublic(dataset.getDmp().isPublic()); - elastic.setGrantStatus(dataset.getDmp().getGrant().getStatus()); - elastic.setFormData(datasetManager.getWordDocumentText(dataset)); + elastic.setPublic(tempDataset.getDmp().isPublic()); + elastic.setGrantStatus(tempDataset.getDmp().getGrant().getStatus()); + elastic.setFormData(datasetManager.getWordDocumentText(tempDataset)); return elastic; }