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/DashBoardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java index 16d6f03b5..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)); @@ -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 && !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 && !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 { - 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)) 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/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; 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; 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-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(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 { 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 { 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..a48626cb8 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html @@ -21,7 +21,7 @@
+
open_in_new{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}} group_add{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}} @@ -123,7 +123,7 @@ - -
{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{activity.dmp}}
+
{{activity.dmp}}
-
+ - - -
{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{dataset.dmp}}
+
{{dataset.dmp}}
@@ -32,7 +32,7 @@ - + +
+ public + {{'DMP-OVERVIEW.PUBLIC' | translate}}
- . -
+ . + + +
lock_outline {{'DMP-OVERVIEW.LOCKED' | translate}}
-
{{'GENERAL.STATUSES.EDIT' | translate}} : + . +
{{'GENERAL.STATUSES.EDIT' | translate}} : {{dataset.modified | date:"longDate"}}
@@ -49,12 +52,12 @@ matTooltipPosition="above"> content_copy - - @@ -92,7 +94,7 @@
-
+
-
+
diff --git a/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts b/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts index c9ff096a2..168091149 100644 --- a/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts +++ b/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core'; import { BaseComponent } from '@common/base/base.component'; import { DatasetOverviewModel } from '@app/core/model/dataset/dataset-overview'; import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item'; -import { Observable, of as observableOf, interval } from 'rxjs'; +import { Observable, of as observableOf } from 'rxjs'; import { ActivatedRoute, Router, Params } from '@angular/router'; import { DatasetService } from '@app/core/services/dataset/dataset.service'; import { TranslateService } from '@ngx-translate/core'; @@ -166,11 +166,9 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit { } reloadPage(): void { - const path = this.location.path(); - this.router.navigateByUrl('/reload', { skipLocationChange: true }).then(() => { - this.router.navigate([path]); - }); - } + const path = this.location.path(); + this.router.navigateByUrl('/reload', { skipLocationChange: true }).then(() => this.router.navigate([path])); + } getDmpResearchers() { this.dmpService.getSingle(this.dataset.dmp.id).pipe(takeUntil(this._destroyed)) @@ -266,10 +264,10 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit { editClicked(dataset: DatasetOverviewModel) { if (dataset.public) { let url = this.router.createUrlTree(['/datasets/publicEdit/', dataset.id]) - window.open(url.toString(), '_blank') + window.open(url.toString(), '_blank') } else { let url = this.router.createUrlTree(['/datasets/edit/', dataset.id]) - window.open(url.toString(), '_blank') + window.open(url.toString(), '_blank') } } @@ -410,8 +408,8 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit { .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/dmp/listing/dmp-listing.component.html b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html index b52cd2f86..06fed8dee 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html @@ -5,7 +5,7 @@ clear

{{'DMP-LISTING.TEXT-INFO' | translate}}

-

{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} {{'DMP-LISTING.LINK-ZENODO' | translate}} {{'DMP-LISTING.GET-IDEA' | translate}}

+

{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} {{'DMP-LISTING.LINK-ZENODO' | translate}} {{'DMP-LISTING.GET-IDEA' | 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; } diff --git a/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.html b/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.html index 2d726af4b..807a4acd0 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/listing-item/dmp-listing-item.component.html @@ -1,13 +1,13 @@
- +
{{ 'DMP-LISTING.DMP' | translate }}
{{ 'DMP-LISTING.EDITED' | translate }}: {{ dmp.modifiedTime | date: "longDate" }}
{{dmp.label}}
- {{ roleDisplay(dmp.users) }} - . + {{ roleDisplay(dmp.users) }} + . public{{'TYPES.DMP-VISIBILITY.PUBLIC' | translate}} done{{ enumUtils.toDmpStatusString(dmp.status) }} create{{ enumUtils.toDmpStatusString(dmp.status) }} @@ -28,9 +28,9 @@ @@ -56,11 +56,10 @@ - - - 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..25f3239b4 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 @@ -34,7 +34,6 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { isDraft: boolean; isFinalized: boolean; isPublished: boolean; - lockStatus: Boolean; constructor( private router: Router, @@ -46,28 +45,25 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { private uiNotificationService: UiNotificationService, private lockService: LockService, private location: Location) { - super(); - } + super(); + } ngOnInit() { if (this.dmp.status == DmpStatus.Draft) { this.isDraft = true; this.isFinalized = false; this.isPublished = false; - this.checkLockStatus(this.dmp.id); } else if (this.dmp.status == DmpStatus.Finalized) { this.isDraft = false; this.isFinalized = true; this.isPublished = false; - this.checkLockStatus(this.dmp.id); if (this.dmp.public == true) { this.isPublished = true } } } - checkLockStatus(id: string) { - this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed)) - .subscribe(lockStatus => this.lockStatus = lockStatus); + public isAuthenticated(): boolean { + return !(!this.authentication.current()); } openShareDialog(rowId: any, rowName: any) { @@ -86,16 +82,20 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { this.router.navigate(['/plans/edit/' + dmpId]); } - addDataset(rowId: String) { - this.router.navigate(['/datasets/new/' + rowId]); - } - showDatasets(rowId: String, rowLabel: String) { this.router.navigate(['/datasets/dmp/' + rowId, { dmpLabel: rowLabel }]); } - viewVersions(rowId: String, rowLabel: String) { - this.router.navigate(['/plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } }); + viewVersions(rowId: String, rowLabel: String, dmp: DmpListingModel) { + if (dmp.public && !this.isUserOwner(dmp)) { + 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 { + let url = this.router.createUrlTree(['/plans/versions/', rowId, { groupLabel: rowLabel }]); + window.open(url.toString(), '_blank'); + // this.router.navigate(['/plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } }); + } } // itemClicked() { @@ -131,12 +131,26 @@ 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]); } 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'); } downloadXml(id: string) { @@ -200,7 +214,18 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { return filename; } - deleteClicked(dmp: DmpListingModel) { + deleteClicked(id: string) { + this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed)) + .subscribe(lockStatus => { + if (!lockStatus) { + this.openDeleteDialog(id); + } else { + this.openLockedByUserDialog(); + } + }); + } + + openDeleteDialog(id: string) { const dialogRef = this.dialog.open(ConfirmationDialogComponent, { maxWidth: '300px', restoreFocus: false, @@ -213,7 +238,7 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { }); dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => { if (result) { - this.dmpService.delete(dmp.id) + this.dmpService.delete(id) .pipe(takeUntil(this._destroyed)) .subscribe( complete => this.onDeleteCallbackSuccess(), @@ -223,6 +248,16 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit { }); } + openLockedByUserDialog() { + const dialogRef = this.dialog.open(ConfirmationDialogComponent, { + maxWidth: '400px', + restoreFocus: false, + data: { + message: this.language.instant('DMP-EDITOR.ACTIONS.LOCK') + } + }); + } + isDraftDmp(activity: DmpListingModel) { return activity.status == DmpStatus.Draft; } 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..acd3b4987 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}}
- . - + @@ -52,7 +52,7 @@
- -
+
@@ -131,7 +130,7 @@
-
+

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

-
- 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 000000000..1e3ae7552 Binary files /dev/null and b/dmp-frontend/src/assets/splash/assets/img/flag-of-germany.png differ diff --git a/dmp-frontend/src/assets/splash/assets/img/flag-greece.png b/dmp-frontend/src/assets/splash/assets/img/flag-of-greece.png similarity index 100% rename from dmp-frontend/src/assets/splash/assets/img/flag-greece.png rename to dmp-frontend/src/assets/splash/assets/img/flag-of-greece.png diff --git a/dmp-frontend/src/assets/splash/assets/img/NoPath - Copy (7).png b/dmp-frontend/src/assets/splash/assets/img/flag-of-spain.png similarity index 100% rename from dmp-frontend/src/assets/splash/assets/img/NoPath - Copy (7).png rename to dmp-frontend/src/assets/splash/assets/img/flag-of-spain.png diff --git a/dmp-frontend/src/assets/splash/assets/img/Image 82.png b/dmp-frontend/src/assets/splash/assets/img/flag-of-turkey.png similarity index 100% rename from dmp-frontend/src/assets/splash/assets/img/Image 82.png rename to dmp-frontend/src/assets/splash/assets/img/flag-of-turkey.png