From 3d1b0adc6e3f0641d32cbfcb152aad038790378a Mon Sep 17 00:00:00 2001 From: gpapavgeri Date: Wed, 22 Jul 2020 17:46:21 +0300 Subject: [PATCH 01/17] add status to DmpOverviewModel used in DatasetOverviewModel --- .../data/listingmodels/DataManagementPlanOverviewModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java index 17a235c57..362cd510d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java @@ -176,12 +176,12 @@ public class DataManagementPlanOverviewModel implements DataModel Date: Thu, 23 Jul 2020 12:01:37 +0300 Subject: [PATCH 02/17] Fixed various issues when creating world document and storing data to the elastic --- .../logic/mapper/elastic/DatasetMapper.java | 3 + .../eudat/logic/mapper/elastic/DmpMapper.java | 6 +- .../utilities/documents/word/WordBuilder.java | 58 +++++++++++++------ 3 files changed, 45 insertions(+), 22 deletions(-) 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 22cce074d..6e39738fa 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 @@ -23,6 +23,9 @@ public class DatasetMapper { } public Dataset toElastic(eu.eudat.data.entities.Dataset dataset, List tags) throws Exception { + if (dataset.getProfile() == null) { + return null; + } Dataset elastic = new Dataset(); elastic.setId(dataset.getId().toString()); if (tags != null && !tags.isEmpty()) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DmpMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DmpMapper.java index 956af3b5b..608da5fca 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 @@ -1,9 +1,7 @@ package eu.eudat.logic.mapper.elastic; import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; -import eu.eudat.data.dao.entities.DMPDao; import eu.eudat.data.entities.DMP; -import eu.eudat.elastic.entities.Collaborator; import eu.eudat.elastic.entities.Dataset; import eu.eudat.elastic.entities.Dmp; import eu.eudat.elastic.entities.Tag; @@ -12,10 +10,10 @@ import eu.eudat.logic.services.ApiContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; public class DmpMapper { @@ -70,7 +68,7 @@ public class DmpMapper { logger.error(e.getMessage(), e); } return null; - }).collect(Collectors.toList())); + }).filter(Objects::nonNull).collect(Collectors.toList())); } if (dmp.getAssociatedDmps() != null) { elastic.setTemplates(dmp.getAssociatedDmps().stream().map(DatasetTemplateMapper::toElastic).collect(Collectors.toList())); 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 9c58e4742..26c98b530 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 @@ -1,6 +1,6 @@ package eu.eudat.logic.utilities.documents.word; -import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.utilities.documents.types.ParagraphStyle; @@ -13,8 +13,6 @@ import eu.eudat.models.data.user.components.datasetprofile.Section; import eu.eudat.models.data.user.composite.DatasetProfilePage; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import org.apache.poi.xwpf.usermodel.*; -import org.json.JSONArray; -import org.json.JSONObject; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; @@ -24,9 +22,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.math.BigInteger; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class WordBuilder { private static final Logger logger = LoggerFactory.getLogger(WordBuilder.class); @@ -234,15 +230,33 @@ public class WordBuilder { String comboboxType = ((ComboBoxData) field.getData()).getType(); if (comboboxType.equals("autocomplete")) { ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); if (field.getValue() == null) return null; - Map map = new HashMap<>(); - if (!field.getValue().equals("")) { + List> mapList = new ArrayList<>(); + if (!field.getValue().equals("") && field.getValue().toString() != null) { try { - JSONArray jsonarray = new JSONArray(field.getValue().toString()); - for (int i = 0; i < jsonarray.length(); i++) { - JSONObject jsonobject = jsonarray.getJSONObject(i); - String id = jsonobject.getString("id"); - String label = jsonobject.getString("label"); + mapList = Arrays.asList(mapper.readValue(field.getValue().toString(), HashMap[].class)); + }catch (Exception e) { + logger.warn(e.getMessage(), e); + Map map = new HashMap<>(); + map.put("label", field.getValue().toString()); + mapList.add(map); + } + /*try { + if (field.getValue().toString().startsWith("[")) { + JSONArray jsonarray = new JSONArray(field.getValue().toString()); + for (int i = 0; i < jsonarray.length(); i++) { + JSONObject jsonObject = jsonarray.getJSONObject(i); + String id = jsonObject.get("id").toString(); + String label = jsonObject.getString("label"); + if (id != null && label != null) { + map.put(id, label); + } + } + } else if (field.getValue().toString().startsWith("{")) { + JSONObject jsonObject = new JSONObject(field.getValue().toString()); + String id = jsonObject.get("id").toString(); + String label = jsonObject.getString("label"); if (id != null && label != null) { map.put(id, label); } @@ -251,13 +265,21 @@ public class WordBuilder { Map exMap = mapper.readValue(field.getValue().toString(), new TypeReference>() { }); return exMap.get("label"); - } + }*/ } StringBuilder sb = new StringBuilder(); int index = 0; - for (Map.Entry entry : map.entrySet()) { - sb.append(entry.getValue()); - if (index != map.size() - 1) sb.append(", "); + for (Map map: mapList) { + if (!map.containsKey("label") && !map.containsKey("description")) { + logger.error("Value is missing the \"label\" and the \"description\" attributes"); + map.put("label", "unknown Name"); + } + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue() != null && (entry.getKey().equals("label") || entry.getKey().equals("description"))) { + sb.append(entry.getValue().toString()); + } + } + if (index != mapList.size() - 1) sb.append(", "); index++; } return sb.toString(); @@ -269,7 +291,7 @@ public class WordBuilder { if (field.getValue() != null && field.getValue().equals("true")) return "Yes"; else return "No"; case "radiobox": - return field.getValue().toString(); + return field.getValue() != null ? field.getValue().toString() : null; case "checkBox": CheckBoxData data = (CheckBoxData) field.getData(); if (field.getValue() == null || field.getValue().equals("false")) return null; From 4b267f2f84de22d59f697c1d93ad622ca671726c Mon Sep 17 00:00:00 2001 From: gpapavgeri Date: Thu, 23 Jul 2020 12:35:08 +0300 Subject: [PATCH 03/17] lockStatus check and icon added to all components --- .../ui/dashboard/drafts/drafts.component.html | 4 +++- .../ui/dashboard/drafts/drafts.component.ts | 19 ++++++++++++++++++- .../recent-edited-activity.component.html | 8 ++++++-- .../recent-edited-activity.component.ts | 11 ++++++++++- ...ent-edited-dataset-activity.component.html | 4 +++- ...ecent-edited-dataset-activity.component.ts | 13 ++++++++++++- .../recent-edited-dmp-activity.component.html | 4 +++- .../recent-edited-dmp-activity.component.ts | 13 ++++++++++++- .../dataset-listing-item.component.html | 4 +++- .../dataset-listing-item.component.ts | 1 - .../overview/dataset-overview.component.html | 2 +- .../overview/dataset-overview.component.ts | 5 ++++- .../dmp-listing-item.component.html | 3 ++- .../dmp-listing-item.component.ts | 1 - 14 files changed, 77 insertions(+), 15 deletions(-) diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html index bc9dd7c0d..9d70216c8 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html @@ -34,6 +34,8 @@ done{{ enumUtils.toDmpStatusString(activity.status) }} create{{ enumUtils.toDmpStatusString(activity.status) }} . + lock_outline{{'DMP-OVERVIEW.LOCKED' | translate}} + . {{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}
@@ -54,7 +56,7 @@ - diff --git a/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.ts b/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.ts index 1b67db843..c7cddea40 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.ts @@ -60,7 +60,6 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { this.isDraft = false; this.isFinalized = true; this.isPublished = false; - this.checkLockStatus(this.dmp.id); if (this.dmp.public == true) { this.isPublished = true } } } From 3c2caee679e9753bcc7403fb876f9000946290a5 Mon Sep 17 00:00:00 2001 From: gpapavgeri Date: Thu, 23 Jul 2020 16:24:34 +0300 Subject: [PATCH 04/17] update of users actions (edit, delete, etc) according to their role --- .../ui/dashboard/drafts/drafts.component.html | 8 ++++---- .../recent-edited-activity.component.html | 12 ++++++------ ...ecent-edited-dataset-activity.component.html | 8 ++++---- .../recent-edited-dmp-activity.component.html | 4 ++-- .../dataset-listing-item.component.html | 12 ++++++------ .../dataset-listing-item.component.ts | 13 +++++++++++++ .../overview/dataset-overview.component.html | 11 +++++------ .../dmp-listing-item.component.html | 10 +++++----- .../listing-item/dmp-listing-item.component.ts | 17 +++++++++++++++++ .../ui/dmp/overview/dmp-overview.component.html | 10 +++++----- .../ui/dmp/overview/dmp-overview.component.scss | 2 +- 11 files changed, 68 insertions(+), 39 deletions(-) diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html index 9d70216c8..6a45a9359 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html @@ -39,11 +39,11 @@ {{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}
-
{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}} -
{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}
+
{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}} +
{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}
-
{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{activity.dmp}}
+
{{activity.dmp}}
@@ -56,7 +56,7 @@ - -
{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{ getDmp(activity) }}
+
{{ getDmp(activity) }}
@@ -127,7 +127,7 @@ - -
{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{activity.dmp}}
+
{{activity.dmp}}
@@ -56,7 +56,7 @@ - -
{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{dataset.dmp}}
+
{{dataset.dmp}}
@@ -34,7 +34,7 @@ -
launch @@ -92,7 +91,7 @@
-
+
{{dmp.label}}
- {{ roleDisplay(dmp.users) }} - . + {{ roleDisplay(dmp.users) }} + . public{{'TYPES.DMP-VISIBILITY.PUBLIC' | translate}} done{{ enumUtils.toDmpStatusString(dmp.status) }} create{{ enumUtils.toDmpStatusString(dmp.status) }} @@ -30,9 +30,9 @@ diff --git a/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.ts b/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.ts index c7cddea40..f41c73873 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.ts @@ -64,6 +64,10 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { } } + public isAuthenticated(): boolean { + return !(!this.authentication.current()); + } + checkLockStatus(id: string) { this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed)) .subscribe(lockStatus => this.lockStatus = lockStatus); @@ -130,6 +134,19 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { } } + isUserDMPRelated() { + const principal: Principal = this.authentication.current(); + let isRelated: boolean = false; + if (this.dmp && principal) { + this.dmp.users.forEach(element => { + if (element.id === principal.id) { + isRelated = true; + } + }) + } + return isRelated; + } + cloneClicked(dmp: DmpListingModel) { this.router.navigate(['/plans/clone/' + dmp.id]); } diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.html b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.html index dfc4e5db0..fb3457e6d 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.html +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.html @@ -16,8 +16,8 @@

{{ roleDisplayFromList(dmp.users) }}

- . -
+ . +
public {{'DMP-OVERVIEW.PUBLIC' | translate}} @@ -100,7 +100,7 @@
-
-
+

{{ 'DMP-LISTING.ACTIONS.DEPOSIT' | translate }}

-
diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.scss b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.scss index bd0fdb41b..d3541c7dc 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.scss +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.scss @@ -218,7 +218,12 @@ opacity: 0.6; } -.pointer:hover { +.zenodo-link { + text-decoration: underline; + color: black; +} + +.pointer:hover, .zenodo-link:hover { color: #00b29f; } From 6d1ecca154d343a40243989718ce47d26075b758 Mon Sep 17 00:00:00 2001 From: gpapavgeri Date: Thu, 23 Jul 2020 17:24:02 +0300 Subject: [PATCH 06/17] routerLink changed in dataset-listing-item & delete updated for dataset-overview --- .../listing/listing-item/dataset-listing-item.component.html | 2 +- .../src/app/ui/dataset/overview/dataset-overview.component.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dmp-frontend/src/app/ui/dataset/listing/listing-item/dataset-listing-item.component.html b/dmp-frontend/src/app/ui/dataset/listing/listing-item/dataset-listing-item.component.html index 3e588a713..67b5c92ad 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/listing-item/dataset-listing-item.component.html +++ b/dmp-frontend/src/app/ui/dataset/listing/listing-item/dataset-listing-item.component.html @@ -1,5 +1,5 @@
- +
{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}
{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{dataset.modified | date:"longDate"}}
diff --git a/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.html b/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.html index 4010e7440..c63b00497 100644 --- a/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.html +++ b/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.html @@ -54,7 +54,7 @@ matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above"> create -
- Flag of Greece -
+ Flag of Greece +

Athena Research & Innovation Center

Dimitra Aglamisi, Elli Papadopoulou

- Flag of Spain -
+ Flag of Spain +

Consorcio Madroño

Lanko López, Juan Corrales Correyero, Fernando González Ballesteros

- Flag of Turkey -
+ Flag of Turkey +

Turkish Higher Education Council Research Data and Open Data working group

-
+
+
+ Flag of Austria +
+

UNIVERSITY OF VIENNA

+

Gerda McNeill, Raman Ganguly, Mihaela Hubert

+
+
diff --git a/dmp-frontend/src/assets/splash/assets/img/flag-of-germany.png b/dmp-frontend/src/assets/splash/assets/img/flag-of-germany.png new file mode 100644 index 0000000000000000000000000000000000000000..1e3ae7552ccf50b81e80040bfb770e054606be94 GIT binary patch literal 18388 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
ibkLHhL=u}za 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 Date: Fri, 24 Jul 2020 10:50:16 +0300 Subject: [PATCH 08/17] RecentActivityModel will store profile as DatasetProfileOverviewModel instead of just string --- .../data/dashboard/recent/model/RecentActivityModel.java | 7 ++++--- .../data/dashboard/recent/model/RecentDatasetModel.java | 5 +++-- .../models/data/dashboard/recent/model/RecentDmpModel.java | 3 +-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentActivityModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentActivityModel.java index f726561ad..3c168b4a4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentActivityModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentActivityModel.java @@ -1,6 +1,7 @@ package eu.eudat.models.data.dashboard.recent.model; import eu.eudat.models.DataModel; +import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.queryable.queryableentity.DataEntity; @@ -20,7 +21,7 @@ public abstract class RecentActivityModel users; private Boolean isPublic; @@ -121,11 +122,11 @@ public abstract class RecentActivityModel new DataRepository().fromDataModel(item.getDataRepository())).collect(Collectors.toList())) : ""); this.setDmp( entity.getDmp() != null ? entity.getDmp().getLabel() : ""); @@ -95,7 +96,7 @@ public class RecentDatasetModel extends RecentActivityModel { this.groupId = entity.getGroupId(); this.setPublic(entity.isPublic()); this.organisations = LabelBuilder.getLabel(entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList())); - if (entity.getProfile() != null) this.setProfile(entity.getProfile().getLabel()); + //if (entity.getProfile() != null) this.setProfile(new DatasetProfileOverviewModel().fromDataModel(entity.getProfile())); this.setPublishedAt(entity.getPublishedAt()); this.setUsers(entity.getUsers().stream().map(x -> new UserInfoListingModel().fromDataModel(x)).collect(Collectors.toList())); return this; From b7b8e0b0e8be2b572a546391aa7faa66f9518a19 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 24 Jul 2020 11:46:11 +0300 Subject: [PATCH 09/17] Change the profile from DatasetListingModel from String to DatasetProfileOverviewModel --- .../models/data/listingmodels/DatasetListingModel.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DatasetListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DatasetListingModel.java index fab2747d7..667c7ebb2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DatasetListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DatasetListingModel.java @@ -5,6 +5,7 @@ import eu.eudat.models.DataModel; import eu.eudat.models.data.dataset.DataRepository; import eu.eudat.models.data.dataset.Service; import eu.eudat.logic.utilities.helpers.LabelBuilder; +import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import java.util.ArrayList; import java.util.Date; @@ -18,7 +19,7 @@ public class DatasetListingModel implements DataModel Date: Fri, 24 Jul 2020 12:12:54 +0300 Subject: [PATCH 10/17] Improve data integrity of recent Activity data retrieval and added elastic support to it --- .../logic/managers/DashBoardManager.java | 60 ++++++++++++++++--- 1 file changed, 51 insertions(+), 9 deletions(-) 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 16d6f03b5..e4da1164f 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 @@ -193,6 +193,7 @@ public class DashBoardManager { @Transactional public List getNewRecentActivity(RecentActivityTableRequest tableRequest, Principal principal) { + boolean isAuthenticated = principal.getId() != null; List recentActivityModels = new ArrayList<>(); DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao(); DatasetDao datasetRepository = databaseRepository.getDatasetDao(); @@ -201,26 +202,67 @@ public class DashBoardManager { DatasetCriteria datasetCriteria = new DatasetCriteria(); datasetCriteria.setLike(tableRequest.getCriteria().getLike()); datasetCriteria.setAllVersions(false); + datasetCriteria.setIsPublic(!isAuthenticated); DataManagementPlanCriteria dataManagementPlanCriteria = new DataManagementPlanCriteria(); dataManagementPlanCriteria.setAllVersions(false); dataManagementPlanCriteria.setLike(tableRequest.getCriteria().getLike()); + dataManagementPlanCriteria.setIsPublic(!isAuthenticated); + dataManagementPlanCriteria.setOnlyPublic(!isAuthenticated); QueryableList dmpList; QueryableList datasetList; - if (principal.getId() != null) { - datasetCriteria.setIsPublic(false); - List roles = new LinkedList<>(); - dmpList = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId(), roles); - datasetList = datasetRepository.getAuthenticated(datasetRepository.getWithCriteria(datasetCriteria), user, roles); + List datasets = null; + List dmps = null; + + if (apiContext.getOperationsContext().getElasticRepository().getDatasetRepository() != null) { + try { + eu.eudat.elastic.criteria.DatasetCriteria datasetElasticCriteria = new eu.eudat.elastic.criteria.DatasetCriteria(); + datasetElasticCriteria.setLike(tableRequest.getCriteria().getLike()); + datasetElasticCriteria.setAllowAllVersions(false); + datasetElasticCriteria.setPublic(!isAuthenticated); + datasets = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().query(datasetElasticCriteria); + }catch (Exception e) { + logger.warn(e.getMessage(), e); + datasets = null; + } + } + + if (apiContext.getOperationsContext().getElasticRepository().getDmpRepository() != null) { + try { + eu.eudat.elastic.criteria.DmpCriteria dmpElasticCriteria = new eu.eudat.elastic.criteria.DmpCriteria(); + dmpElasticCriteria.setLike(tableRequest.getCriteria().getLike()); + dmpElasticCriteria.setAllowAllVersions(false); + dmpElasticCriteria.setPublic(!isAuthenticated); + dmps = apiContext.getOperationsContext().getElasticRepository().getDmpRepository().query(dmpElasticCriteria); + }catch (Exception e) { + logger.warn(e.getMessage(), e); + datasets = null; + } + } + + if (dmps != null) { + List finalDmps = dmps; + dmpList = dataManagementPlanRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDmps.stream().map(Dmp::getId).collect(Collectors.toList()))).distinct(); + } else { + dmpList = dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria).distinct(); + } + + if (datasets != null) { + List finalDatasets = datasets; + datasetList = datasetRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDatasets.stream().map(x -> UUID.fromString(x.getId())).collect(Collectors.toList()))); } else { - dataManagementPlanCriteria.setIsPublic(true); - dataManagementPlanCriteria.setOnlyPublic(true); - datasetCriteria.setIsPublic(true); - dmpList = dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria); datasetList = datasetRepository.getWithCriteria(datasetCriteria); } + if (isAuthenticated) { + + List roles = new LinkedList<>(); + dmpList = dataManagementPlanRepository.getAuthenticated(dmpList, principal.getId(), roles); + datasetList = datasetRepository.getAuthenticated(datasetList, user, roles); + + } + /*CompletableFuture future = CompletableFuture.runAsync(() -> */{ recentActivityModels.addAll(dmpList .withHint(HintedModelFactory.getHint(RecentDmpModel.class)) From 3b09bef7d543b2084a00cf4869d8851639943ea2 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 24 Jul 2020 12:38:16 +0300 Subject: [PATCH 11/17] Fixed minor issues with the elastic search on recent activity --- .../java/eu/eudat/logic/managers/DashBoardManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 e4da1164f..d3c662182 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 @@ -137,10 +137,10 @@ public class DashBoardManager { List roles = new LinkedList<>(); List finalDmps = dmps; - CompletableFuture dmpFuture = dataManagementPlanRepository.getAuthenticated(dmps != null ? dataManagementPlanRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDmps.stream().map(Dmp::getId).collect(Collectors.toList()))) : dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId(), roles).distinct().countAsync() + CompletableFuture dmpFuture = dataManagementPlanRepository.getAuthenticated((dmps != null && !dmps.isEmpty()) ? dataManagementPlanRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDmps.stream().map(Dmp::getId).collect(Collectors.toList()))) : dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId(), roles).distinct().countAsync() .whenComplete((dmpsStats, throwable) -> statistics.setTotalDataManagementPlanCount(dmpsStats)); List finalDatasets = datasets; - CompletableFuture datasetFuture = datasetRepository.getAuthenticated(datasets != null ? datasetRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDatasets.stream().map(x -> UUID.fromString(x.getId())).collect(Collectors.toList()))) : datasetRepository.getWithCriteria(datasetCriteria), user, roles).countAsync() + CompletableFuture datasetFuture = datasetRepository.getAuthenticated((datasets != null && !datasets.isEmpty()) ? datasetRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDatasets.stream().map(x -> UUID.fromString(x.getId())).collect(Collectors.toList()))) : datasetRepository.getWithCriteria(datasetCriteria), user, roles).countAsync() .whenComplete((datasetsStats, throwable) -> statistics.setTotalDataSetCount(datasetsStats)); CompletableFuture grantFuture = grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user).countAsync() .whenComplete((grantsStats, throwable) -> statistics.setTotalGrantCount(grantsStats)); @@ -241,14 +241,14 @@ public class DashBoardManager { } } - if (dmps != null) { + if (dmps != null && !dmps.isEmpty()) { List finalDmps = dmps; dmpList = dataManagementPlanRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDmps.stream().map(Dmp::getId).collect(Collectors.toList()))).distinct(); } else { dmpList = dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria).distinct(); } - if (datasets != null) { + if (datasets != null && !datasets.isEmpty()) { List finalDatasets = datasets; datasetList = datasetRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDatasets.stream().map(x -> UUID.fromString(x.getId())).collect(Collectors.toList()))); } else { From 62d6ac01dff991b9c185095e403de23f844d4580 Mon Sep 17 00:00:00 2001 From: gpapavgeri Date: Fri, 24 Jul 2020 12:43:09 +0300 Subject: [PATCH 12/17] Change the profile of DatasetListingModel & RecentActivityModel from String to DatasetProfileModel and Update profileId in openDmpSearchDialogue() --- dmp-frontend/src/app/core/model/dataset/dataset-listing.ts | 4 +++- .../core/model/recent-activity/recent-activity.model.ts | 3 ++- .../src/app/ui/dashboard/drafts/drafts.component.html | 2 +- .../src/app/ui/dashboard/drafts/drafts.component.ts | 2 +- .../recent-edited-activity.component.ts | 2 +- .../recent-edited-dataset-activity.component.html | 2 +- .../recent-edited-dataset-activity.component.ts | 2 +- .../listing/listing-item/dataset-listing-item.component.ts | 7 ++++--- 8 files changed, 14 insertions(+), 10 deletions(-) diff --git a/dmp-frontend/src/app/core/model/dataset/dataset-listing.ts b/dmp-frontend/src/app/core/model/dataset/dataset-listing.ts index 3ce5fa9cb..c4aa19530 100644 --- a/dmp-frontend/src/app/core/model/dataset/dataset-listing.ts +++ b/dmp-frontend/src/app/core/model/dataset/dataset-listing.ts @@ -1,3 +1,5 @@ +import { DatasetProfileModel } from './dataset-profile'; + export interface DatasetListingModel { id: string; label: String; @@ -6,7 +8,7 @@ export interface DatasetListingModel { grant: String; grantId: String; grantAbbreviation: String; - profile: String; + profile: DatasetProfileModel; dataRepositories: String; registries: String; services: String; diff --git a/dmp-frontend/src/app/core/model/recent-activity/recent-activity.model.ts b/dmp-frontend/src/app/core/model/recent-activity/recent-activity.model.ts index 871211661..b1cf43c60 100644 --- a/dmp-frontend/src/app/core/model/recent-activity/recent-activity.model.ts +++ b/dmp-frontend/src/app/core/model/recent-activity/recent-activity.model.ts @@ -1,5 +1,6 @@ import { RecentActivityType } from '@app/core/common/enum/recent-activity-type'; import { UserInfoListingModel } from '../user/user-info-listing'; +import { DatasetProfileModel } from '../dataset/dataset-profile'; export class RecentActivityModel { id: string; @@ -14,7 +15,7 @@ export class RecentActivityModel { grantId: String; finalizedAt: Date; publishedAt: Date; - profile: String; + profile: DatasetProfileModel; type: RecentActivityType; users: UserInfoListingModel[]; public: boolean; diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html index 6a45a9359..54a29ff83 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html @@ -53,7 +53,7 @@
-
-
-
+

{{ roleDisplayFromList(dataset.users) }}

- . -
-
- public - {{'DMP-OVERVIEW.PUBLIC' | translate}} -
-
- public_off - {{'DMP-OVERVIEW.PRIVATE' | translate}} -
+ . + + +
+ public + {{'DMP-OVERVIEW.PUBLIC' | translate}}
- . -
+ . + + +
lock_outline {{'DMP-OVERVIEW.LOCKED' | translate}}
-
{{'GENERAL.STATUSES.EDIT' | translate}} : + . +
{{'GENERAL.STATUSES.EDIT' | translate}} : {{dataset.modified | date:"longDate"}}
diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.html b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.html index fb3457e6d..7ffe466cd 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.html +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.html @@ -13,28 +13,28 @@
-

+

{{ roleDisplayFromList(dmp.users) }}

- . -
-
- public - {{'DMP-OVERVIEW.PUBLIC' | translate}} -
-
- public_off - {{'DMP-OVERVIEW.PRIVATE' | translate}} -
+ . + + +
+ public + {{'DMP-OVERVIEW.PUBLIC' | translate}}
- -
- . - lock_outline + . + + +
+ lock_outline {{'DMP-OVERVIEW.LOCKED' | translate}}
- . - + From ca4525238ecbcbbf1f0e3590c0d9fba6dabac56f Mon Sep 17 00:00:00 2001 From: gpapavgeri Date: Fri, 24 Jul 2020 17:40:53 +0300 Subject: [PATCH 14/17] lockStatus check update [on delete click for listing components (listing-item, recent-edited, drafts) - not overview] --- .../ui/dashboard/drafts/drafts.component.html | 4 +- .../ui/dashboard/drafts/drafts.component.ts | 32 +++++++---- .../recent-edited-activity.component.html | 8 +-- .../recent-edited-activity.component.ts | 53 +++++++++++++++---- ...ent-edited-dataset-activity.component.html | 4 +- ...ecent-edited-dataset-activity.component.ts | 32 +++++++---- .../recent-edited-dmp-activity.component.html | 4 +- .../recent-edited-dmp-activity.component.ts | 34 ++++++++---- .../dataset-listing-item.component.html | 4 +- .../dataset-listing-item.component.ts | 42 ++++++++++----- .../overview/dataset-overview.component.ts | 23 ++++---- .../dmp-listing-item.component.html | 4 +- .../dmp-listing-item.component.ts | 36 +++++++++---- 13 files changed, 180 insertions(+), 100 deletions(-) diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html index 54a29ff83..593c66afe 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html @@ -34,8 +34,6 @@ done{{ enumUtils.toDmpStatusString(activity.status) }} create{{ enumUtils.toDmpStatusString(activity.status) }} . - lock_outline{{'DMP-OVERVIEW.LOCKED' | translate}} - . {{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}
@@ -56,7 +54,7 @@ -
{{activity.dmp}}
-
+
open_in_new{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}} group_add{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}} diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts index 73e00068d..8efdd2a0a 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts @@ -153,8 +153,9 @@ export class DraftsComponent extends BaseComponent implements OnInit { dialogRef.afterClosed().pipe(takeUntil(this._destroyed)) .subscribe(result => { if (result && result.datasetProfileExist) { - const newDmpId = result.formControl.value.id - this.router.navigate(['/datasets/copy/' + result.datasetId], { queryParams: { newDmpId: newDmpId } }); + const newDmpId = result.formControl.value.id; + let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId } ]); + window.open(url.toString(), '_blank'); } }); } diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html index b5abbdf77..7e402570a 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html @@ -22,7 +22,7 @@
- +
open_in_new{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}} group_add{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}} diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts index 0ac0dfe6a..6a24d7c2d 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts @@ -141,11 +141,6 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn this.router.navigate(['/plans/edit/' + dmp.id]); } - cloneClicked(dmp: DmpListingModel) { - let url = this.router.createUrlTree(['/plans/clone/', dmp.id]); - window.open(url.toString(), '_blank'); - } - deleteDmpClicked(dmp: DmpListingModel) { this.lockService.checkLockStatus(dmp.id).pipe(takeUntil(this._destroyed)) .subscribe(lockStatus => { @@ -375,19 +370,20 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn return filename; } - addDataset(activityId: String) { - this.router.navigate(['/datasets/new/' + activityId]); - } - newVersion(id: String, label: String) { - this.router.navigate(['/plans/new_version/' + id, { dmpLabel: label }]); + let url = this.router.createUrlTree(['/plans/new_version/', id, { dmpLabel: label }]); + window.open(url.toString(), '_blank'); } viewVersions(rowId: String, rowLabel: String, activity: DmpListingModel) { - if (activity.public && !this.isUserOwner) { - this.router.navigate(['/explore-plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } }); + if (activity.public && !this.isUserOwner(activity)) { + let url = this.router.createUrlTree(['/explore-plans/versions/', rowId, { groupLabel: rowLabel }]); + window.open(url.toString(), '_blank'); + // this.router.navigate(['/explore-plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } }); } else { - this.router.navigate(['/plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } }); + let url = this.router.createUrlTree(['/plans/versions/', rowId, { groupLabel: rowLabel }]); + window.open(url.toString(), '_blank'); + // this.router.navigate(['/plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } }); } } @@ -409,8 +405,10 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn dialogRef.afterClosed().pipe(takeUntil(this._destroyed)) .subscribe(result => { if (result && result.datasetProfileExist) { - const newDmpId = result.formControl.value.id - this.router.navigate(['/datasets/copy/' + result.datasetId], { queryParams: { newDmpId: newDmpId } }); + const newDmpId = result.formControl.value.id; + let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId }]); + window.open(url.toString(), '_blank'); + // this.router.navigate(['/datasets/copy/' + result.datasetId], { queryParams: { newDmpId: newDmpId } }); } }); } diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.html b/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.html index 81547c174..802b5895f 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.html +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.html @@ -21,7 +21,7 @@
- +
open_in_new{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}} group_add{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}} diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.ts index 2ec825c63..2c36090ed 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.ts @@ -167,8 +167,8 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen .subscribe(result => { if (result && result.datasetProfileExist) { const newDmpId = result.formControl.value.id; - let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId } ]) - window.open(url.toString(), '_blank') + let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId } ]); + window.open(url.toString(), '_blank'); } }); } diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.html b/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.html index 1cd0c2176..43d543868 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.html +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.html @@ -21,7 +21,7 @@
+ @@ -78,7 +78,7 @@ - -
- -
+
diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts index 269c70146..0ab7ac9d5 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts @@ -7,6 +7,7 @@ import { UrlListingModule } from '@app/library/url-listing/url-listing.module'; import { DmpOverviewComponent } from '@app/ui/dmp/overview/dmp-overview.component'; import { CommonFormsModule } from '@common/forms/common-forms.module'; import { CommonUiModule } from '@common/ui/common-ui.module'; +import { RouterModule } from '@angular/router'; @NgModule({ imports: [ @@ -16,7 +17,8 @@ import { CommonUiModule } from '@common/ui/common-ui.module'; ConfirmationDialogModule, ExportMethodDialogModule, FormattingModule, - AutoCompleteModule + AutoCompleteModule, + RouterModule ], declarations: [ DmpOverviewComponent From 22493569fabd071e89e863295e9091ad513cd6a2 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 27 Jul 2020 13:09:30 +0300 Subject: [PATCH 16/17] Allow to create or update DMP and it's datasets with one endpoint (post full) --- .../main/java/eu/eudat/controllers/DMPs.java | 21 +++++++--- .../managers/DataManagementPlanManager.java | 37 ++++++++++++++---- .../datasetwizard/DatasetWizardModel.java | 35 ++++++++++++++++- .../models/data/dmp/DataManagementPlan.java | 38 ++++++++++--------- .../dmp/DataManagementPlanEditorModel.java | 10 +++-- .../src/app/core/services/dmp/dmp.service.ts | 8 +++- 6 files changed, 113 insertions(+), 36 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 affff7d6e..0460b92d4 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 @@ -210,7 +210,15 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public @ResponseBody ResponseEntity> createOrUpdate(@RequestBody eu.eudat.models.data.dmp.DataManagementPlanEditorModel dataManagementPlanEditorModel, Principal principal) throws Exception { - DMP dmp = this.dataManagementPlanManager.createOrUpdate(this.getApiContext(), dataManagementPlanEditorModel, principal); + DMP dmp = this.dataManagementPlanManager.createOrUpdate(dataManagementPlanEditorModel, principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Created").payload(dmp.getId())); + } + + @Transactional + @RequestMapping(method = RequestMethod.POST, path = "full", consumes = "application/json", produces = "application/json") + public @ResponseBody + ResponseEntity> createOrUpdateWithDatasets(@RequestBody eu.eudat.models.data.dmp.DataManagementPlanEditorModel dataManagementPlanEditorModel, Principal principal) throws Exception { + DMP dmp = this.dataManagementPlanManager.createOrUpdateWithDatasets(dataManagementPlanEditorModel, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Created").payload(dmp.getId())); } @@ -261,7 +269,8 @@ public class DMPs extends BaseController { this.dataManagementPlanManager.makePublic(UUID.fromString(id), principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made public.")); } catch (Exception e) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage())); + logger.error(e.getMessage(), e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to make Data Management Plan public.")); } } @@ -272,7 +281,8 @@ public class DMPs extends BaseController { this.dataManagementPlanManager.makeFinalize(UUID.fromString(id), principal, datasetsToBeFinalized); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made finalized.")); } catch (Exception e) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage())); + logger.error(e.getMessage(), e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to finalize Data Management Plan.")); } } @@ -283,7 +293,8 @@ public class DMPs extends BaseController { this.dataManagementPlanManager.undoFinalize(UUID.fromString(id), principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made active.")); } catch (Exception e) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage())); + logger.error(e.getMessage(), e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to unfinalize the Data Management Plan.")); } } @@ -312,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(e.getMessage())); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to create DOI for the Data Management Plan.")); } } 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 bb659dcd6..bdf98bf3a 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 @@ -208,6 +208,15 @@ public class DataManagementPlanManager { throw new ForbiddenException("Selected DMP is not public"); } dataManagementPlan.fromDataModel(dataManagementPlanEntity); + List datasetEnities = new ArrayList<>(dataManagementPlanEntity.getDataset()); + for (int i = 0; i < datasetEnities.size(); i++) { + for (int j = i; j < dataManagementPlan.getDatasets().size(); j++) { + if (dataManagementPlan.getDatasets().get(j).getId().equals(datasetEnities.get(i).getId())) { + dataManagementPlan.getDatasets().get(j).setDatasetProfileDefinition(datasetManager.getPagedProfile(dataManagementPlan.getDatasets().get(j), datasetEnities.get(i))); + break; + } + } + } if (isPublic) { dataManagementPlan.setDatasets(dataManagementPlan.getDatasets().stream().filter(dataset -> dataset.getStatus() == Dataset.Status.FINALISED.getValue()).collect(Collectors.toList())); } @@ -333,7 +342,7 @@ public class DataManagementPlanManager { * Data Management * */ - public DMP createOrUpdate(ApiContext apiContext, DataManagementPlanEditorModel dataManagementPlan, Principal principal) throws Exception { + public DMP createOrUpdate(DataManagementPlanEditorModel dataManagementPlan, Principal principal) throws Exception { boolean setNotification = false; if (dataManagementPlan.getId() != null) { DMP dmp1 = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(dataManagementPlan.getId()); @@ -412,9 +421,9 @@ public class DataManagementPlanManager { .update(root -> root.get("status"), Dataset.Status.FINALISED.getValue()); List datasetsToBeCanceled = new LinkedList<>(); - for (DatasetListingModel dataset : dataManagementPlan.getDatasets()) { - if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue()) && !dataManagementPlan.getDatasetsToBeFinalized().contains(UUID.fromString(dataset.getId()))) { - datasetsToBeCanceled.add(UUID.fromString(dataset.getId())); + for (DatasetWizardModel dataset : dataManagementPlan.getDatasets()) { + if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue()) && !dataManagementPlan.getDatasetsToBeFinalized().contains(dataset.getId())) { + datasetsToBeCanceled.add(UUID.fromString(dataset.getId().toString())); } } if (!datasetsToBeCanceled.isEmpty()) @@ -423,9 +432,9 @@ public class DataManagementPlanManager { .update(root -> root.get("status"), Dataset.Status.CANCELED.getValue()); } else { List datasetsToBeCanceled = new LinkedList<>(); - for (DatasetListingModel dataset : dataManagementPlan.getDatasets()) { + for (DatasetWizardModel dataset : dataManagementPlan.getDatasets()) { if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue())) { - datasetsToBeCanceled.add(UUID.fromString(dataset.getId())); + datasetsToBeCanceled.add(dataset.getId()); } } if (!datasetsToBeCanceled.isEmpty()) @@ -451,6 +460,20 @@ public class DataManagementPlanManager { return newDmp; } + public DMP createOrUpdateWithDatasets(DataManagementPlanEditorModel dataManagementPlan, Principal principal) throws Exception { + List datasets = new ArrayList<>(); + DMP tempDMP = dataManagementPlan.toDataModel(); + for (DatasetWizardModel datasetWizardModel: dataManagementPlan.getDatasets()) { + datasetWizardModel.setDmp(new DataManagementPlan().fromDataModel(tempDMP)); + Dataset dataset = datasetManager.createOrUpdate(datasetWizardModel, principal); + datasets.add(dataset); + } + + DMP result = createOrUpdate(dataManagementPlan, principal); + + return result; + } + public void newVersion(UUID uuid, DataManagementPlanNewVersionModel dataManagementPlan, Principal principal) throws Exception { DMP oldDmp = databaseRepository.getDmpDao().find(uuid); if (!isUserOwnerOfDmp(oldDmp, principal)) { @@ -1381,7 +1404,7 @@ public class DataManagementPlanManager { dm.setDefinition(dmpProfile); //createOrUpdate(apiContext, dm, principal); - DMP dmp = this.createOrUpdate(apiContext, dm, principal); + DMP dmp = this.createOrUpdate(dm, principal); if (dmp.getOrganisations() == null) { dmp.setOrganisations(new HashSet<>()); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java index 4f7e73451..0365a0264 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetwizard/DatasetWizardModel.java @@ -6,7 +6,6 @@ import eu.eudat.models.DataModel; import eu.eudat.models.data.dataset.DataRepository; import eu.eudat.models.data.dataset.Registry; import eu.eudat.models.data.dataset.Service; -import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.externaldataset.ExternalDatasetListingModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; @@ -191,6 +190,40 @@ public class DatasetWizardModel implements DataModel new Registry().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.dataRepositories = entity.getDatasetDataRepositories() != null ? entity.getDatasetDataRepositories().stream().map(item -> { + DataRepository dataRepository = new DataRepository().fromDataModel(item.getDataRepository()); + if (item.getData() != null) { + Map> data = (Map>) JSONValue.parse(item.getData()); + Map values = data.get("data"); + dataRepository.setInfo(values.get("info")); + } + return dataRepository; + }).collect(Collectors.toList()) : new ArrayList<>(); + this.services = entity.getServices() != null ? entity.getServices().stream().map(item -> new Service().fromDataModel(item.getService())).collect(Collectors.toList()) : new ArrayList<>(); + this.created = entity.getCreated(); + this.externalDatasets = entity.getDatasetExternalDatasets() != null ? entity.getDatasetExternalDatasets().stream().map(item -> { + ExternalDatasetListingModel externalDatasetListingModel = new ExternalDatasetListingModel().fromDataModel(item.getExternalDataset()); + if (item.getData() != null) { + Map> data = (Map>) JSONValue.parse(item.getData()); + Map values = data.get("data"); + externalDatasetListingModel.setInfo(values.get("info")); + externalDatasetListingModel.setType(Integer.parseInt(values.get("type"))); + } + return externalDatasetListingModel; + }).collect(Collectors.toList()) : new ArrayList<>(); + this.modified = entity.getModified(); + return this; + } + @Override public Dataset toDataModel() throws Exception { eu.eudat.data.entities.Dataset entity = new eu.eudat.data.entities.Dataset(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index 627a0f916..c208ee8d1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -3,6 +3,7 @@ package eu.eudat.models.data.dmp; import eu.eudat.data.entities.*; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; +import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile; import eu.eudat.models.data.funder.Funder; @@ -26,7 +27,7 @@ public class DataManagementPlan implements DataModel { private int status; private boolean lockable; private String description; - private List datasets; + private List datasets; private List profiles; private Grant grant; private List organisations; @@ -178,10 +179,11 @@ public class DataManagementPlan implements DataModel { this.lockable = lockable; } - public List getDatasets() { + public List getDatasets() { return datasets; } - public void setDatasets(List datasets) { + + public void setDatasets(List datasets) { this.datasets = datasets; } @@ -233,8 +235,8 @@ public class DataManagementPlan implements DataModel { public DataManagementPlan fromDataModel(DMP entity) { this.id = entity.getId(); this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; - this.organisations = entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()); - this.researchers = entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()); + this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.researchers = entity.getOrganisations() != null ? entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()): new ArrayList<>(); this.version = entity.getVersion(); this.groupId = this.groupId == null ? null : entity.getGroupId(); this.label = entity.getLabel(); @@ -243,7 +245,7 @@ public class DataManagementPlan implements DataModel { this.grant.fromDataModel(entity.getGrant()); this.creator = new eu.eudat.models.data.userinfo.UserInfo(); this.groupId = entity.getGroupId(); - this.lockable = entity.getDataset().stream().findAny().isPresent(); + this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { this.definition.getFields().forEach(item -> { @@ -251,7 +253,7 @@ public class DataManagementPlan implements DataModel { if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); }); } - if (entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) + if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { @@ -261,21 +263,23 @@ public class DataManagementPlan implements DataModel { this.profiles.add(associatedProfile); } } - if (entity.isPublic()) { - this.datasets = entity.getDataset().stream() - .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue()) && !dataset.getStatus().equals(Dataset.Status.SAVED.getValue())) - .map(x-> new DatasetListingModel().fromDataModel(x)).collect(Collectors.toList()); - } else { - this.datasets = entity.getDataset().stream() - .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue())) - .map(x-> new DatasetListingModel().fromDataModel(x)).collect(Collectors.toList()); + if (entity.getDataset() != null) { + if (entity.isPublic()) { + this.datasets = entity.getDataset().stream() + .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue()) && !dataset.getStatus().equals(Dataset.Status.SAVED.getValue())) + .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); + } else { + this.datasets = entity.getDataset().stream() + .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue())) + .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); + } } this.modified = entity.getModified(); this.created = entity.getCreated(); this.description = entity.getDescription(); this.status = entity.getStatus(); - this.associatedUsers = entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()); - this.users = entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()); + this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); + this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); this.doi = entity.getDoi(); if (entity.getProject() != null) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java index b703c5fd9..9072842ee 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java @@ -3,6 +3,7 @@ package eu.eudat.models.data.dmp; import eu.eudat.data.entities.*; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; +import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile; import eu.eudat.models.data.funder.FunderDMPEditorModel; @@ -26,7 +27,7 @@ public class DataManagementPlanEditorModel implements DataModel datasets; + private List datasets; private List profiles; private eu.eudat.models.data.grant.GrantDMPEditorModel grant; private List organisations; @@ -177,10 +178,11 @@ public class DataManagementPlanEditorModel implements DataModel getDatasets() { + public List getDatasets() { return datasets; } - public void setDatasets(List datasets) { + + public void setDatasets(List datasets) { this.datasets = datasets; } @@ -253,7 +255,7 @@ public class DataManagementPlanEditorModel implements DataModel new DatasetListingModel().fromDataModel(item)).collect(Collectors.toList()); + this.datasets = entity.getDataset().stream().map(item -> new DatasetWizardModel().fromDataModelNoDmp(item)).collect(Collectors.toList()); this.modified = entity.getModified(); this.created = entity.getCreated(); this.description = entity.getDescription(); diff --git a/dmp-frontend/src/app/core/services/dmp/dmp.service.ts b/dmp-frontend/src/app/core/services/dmp/dmp.service.ts index 40d9f4391..c9d823f41 100644 --- a/dmp-frontend/src/app/core/services/dmp/dmp.service.ts +++ b/dmp-frontend/src/app/core/services/dmp/dmp.service.ts @@ -70,6 +70,10 @@ export class DmpService { return this.http.post(this.actionUrl, dataManagementPlanModel, { headers: this.headers }); } + createDmpWithDatasets(dataManagementPlanModel: DmpModel): Observable { + return this.http.post(this.actionUrl + 'full', dataManagementPlanModel, { headers: this.headers }); + } + inactivate(id: String): Observable { return this.http.delete(this.actionUrl + 'inactivate/' + id, { headers: this.headers }); } @@ -98,12 +102,12 @@ export class DmpService { return this.http.post(this.actionUrl + 'finalize/' + id, datasetsToBeFinalized, { headers: this.headers }); } - unfinalize( id: String): Observable { + unfinalize(id: String): Observable { return this.http.post(this.actionUrl + 'unfinalize/' + id, { headers: this.headers }); } updateUsers(id: string, users: UserInfoListingModel[]): Observable { - return this.http.post(`${this.actionUrl}updateusers/${id}`, users, {headers: this.headers}); + return this.http.post(`${this.actionUrl}updateusers/${id}`, users, { headers: this.headers }); } getDoi(id: string): Observable { From 7f0aeb8c07e3040b1b048552f5e55c7b416a7cc5 Mon Sep 17 00:00:00 2001 From: gpapavgeri Date: Mon, 27 Jul 2020 13:43:47 +0300 Subject: [PATCH 17/17] login page - laptop image fixed --- dmp-frontend/src/app/ui/auth/login/login.component.html | 2 +- dmp-frontend/src/app/ui/auth/login/login.component.scss | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dmp-frontend/src/app/ui/auth/login/login.component.html b/dmp-frontend/src/app/ui/auth/login/login.component.html index 2db4a1167..62fbd3676 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.component.html +++ b/dmp-frontend/src/app/ui/auth/login/login.component.html @@ -67,8 +67,8 @@
-
+
diff --git a/dmp-frontend/src/app/ui/auth/login/login.component.scss b/dmp-frontend/src/app/ui/auth/login/login.component.scss index 4a3f44871..410d639e0 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.component.scss +++ b/dmp-frontend/src/app/ui/auth/login/login.component.scss @@ -322,8 +322,9 @@ span.zenodoIcon { width: 116px; height: 200px; position: relative; - top: 58px; + top: -140px; left: 243px; + border-top: none; } .login-bg {