Merge branch 'ui-redesign' of gitlab.eudat.eu:dmp/OpenAIRE-EUDAT-DMP-service-pilot into ui-redesign
|
@ -210,7 +210,15 @@ public class DMPs extends BaseController {
|
||||||
@RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
|
@RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
|
||||||
public @ResponseBody
|
public @ResponseBody
|
||||||
ResponseEntity<ResponseItem<UUID>> createOrUpdate(@RequestBody eu.eudat.models.data.dmp.DataManagementPlanEditorModel dataManagementPlanEditorModel, Principal principal) throws Exception {
|
ResponseEntity<ResponseItem<UUID>> 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<UUID>().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<ResponseItem<UUID>> 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<UUID>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Created").payload(dmp.getId()));
|
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<UUID>().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);
|
this.dataManagementPlanManager.makePublic(UUID.fromString(id), principal);
|
||||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DMP>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made public."));
|
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DMP>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made public."));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<DMP>().status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage()));
|
logger.error(e.getMessage(), e);
|
||||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<DMP>().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);
|
this.dataManagementPlanManager.makeFinalize(UUID.fromString(id), principal, datasetsToBeFinalized);
|
||||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DMP>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made finalized."));
|
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DMP>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made finalized."));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<DMP>().status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage()));
|
logger.error(e.getMessage(), e);
|
||||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<DMP>().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);
|
this.dataManagementPlanManager.undoFinalize(UUID.fromString(id), principal);
|
||||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DMP>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made active."));
|
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DMP>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully Data Datamanagement Plan made active."));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<DMP>().status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage()));
|
logger.error(e.getMessage(), e);
|
||||||
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<DMP>().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<String>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully created DOI for Data Datamanagement Plan in question.").payload(zenodoDOI));
|
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<String>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully created DOI for Data Datamanagement Plan in question.").payload(zenodoDOI));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error(e.getMessage(), e);
|
logger.error(e.getMessage(), e);
|
||||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<String>().status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage()));
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<String>().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to create DOI for the Data Management Plan."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -137,10 +137,10 @@ public class DashBoardManager {
|
||||||
|
|
||||||
List<Integer> roles = new LinkedList<>();
|
List<Integer> roles = new LinkedList<>();
|
||||||
List<Dmp> finalDmps = dmps;
|
List<Dmp> 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));
|
.whenComplete((dmpsStats, throwable) -> statistics.setTotalDataManagementPlanCount(dmpsStats));
|
||||||
List<eu.eudat.elastic.entities.Dataset> finalDatasets = datasets;
|
List<eu.eudat.elastic.entities.Dataset> 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));
|
.whenComplete((datasetsStats, throwable) -> statistics.setTotalDataSetCount(datasetsStats));
|
||||||
CompletableFuture grantFuture = grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user).countAsync()
|
CompletableFuture grantFuture = grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user).countAsync()
|
||||||
.whenComplete((grantsStats, throwable) -> statistics.setTotalGrantCount(grantsStats));
|
.whenComplete((grantsStats, throwable) -> statistics.setTotalGrantCount(grantsStats));
|
||||||
|
@ -193,6 +193,7 @@ public class DashBoardManager {
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<RecentActivityModel> getNewRecentActivity(RecentActivityTableRequest tableRequest, Principal principal) {
|
public List<RecentActivityModel> getNewRecentActivity(RecentActivityTableRequest tableRequest, Principal principal) {
|
||||||
|
boolean isAuthenticated = principal.getId() != null;
|
||||||
List<RecentActivityModel> recentActivityModels = new ArrayList<>();
|
List<RecentActivityModel> recentActivityModels = new ArrayList<>();
|
||||||
DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao();
|
DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao();
|
||||||
DatasetDao datasetRepository = databaseRepository.getDatasetDao();
|
DatasetDao datasetRepository = databaseRepository.getDatasetDao();
|
||||||
|
@ -201,26 +202,67 @@ public class DashBoardManager {
|
||||||
DatasetCriteria datasetCriteria = new DatasetCriteria();
|
DatasetCriteria datasetCriteria = new DatasetCriteria();
|
||||||
datasetCriteria.setLike(tableRequest.getCriteria().getLike());
|
datasetCriteria.setLike(tableRequest.getCriteria().getLike());
|
||||||
datasetCriteria.setAllVersions(false);
|
datasetCriteria.setAllVersions(false);
|
||||||
|
datasetCriteria.setIsPublic(!isAuthenticated);
|
||||||
DataManagementPlanCriteria dataManagementPlanCriteria = new DataManagementPlanCriteria();
|
DataManagementPlanCriteria dataManagementPlanCriteria = new DataManagementPlanCriteria();
|
||||||
dataManagementPlanCriteria.setAllVersions(false);
|
dataManagementPlanCriteria.setAllVersions(false);
|
||||||
dataManagementPlanCriteria.setLike(tableRequest.getCriteria().getLike());
|
dataManagementPlanCriteria.setLike(tableRequest.getCriteria().getLike());
|
||||||
|
dataManagementPlanCriteria.setIsPublic(!isAuthenticated);
|
||||||
|
dataManagementPlanCriteria.setOnlyPublic(!isAuthenticated);
|
||||||
|
|
||||||
QueryableList<DMP> dmpList;
|
QueryableList<DMP> dmpList;
|
||||||
QueryableList<Dataset> datasetList;
|
QueryableList<Dataset> datasetList;
|
||||||
|
|
||||||
if (principal.getId() != null) {
|
List<eu.eudat.elastic.entities.Dataset> datasets = null;
|
||||||
datasetCriteria.setIsPublic(false);
|
List<eu.eudat.elastic.entities.Dmp> dmps = null;
|
||||||
List<Integer> roles = new LinkedList<>();
|
|
||||||
dmpList = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId(), roles);
|
if (apiContext.getOperationsContext().getElasticRepository().getDatasetRepository() != null) {
|
||||||
datasetList = datasetRepository.getAuthenticated(datasetRepository.getWithCriteria(datasetCriteria), user, roles);
|
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<Dmp> 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<eu.eudat.elastic.entities.Dataset> finalDatasets = datasets;
|
||||||
|
datasetList = datasetRepository.asQueryable().where((builder, root) -> root.get("id").in(finalDatasets.stream().map(x -> UUID.fromString(x.getId())).collect(Collectors.toList())));
|
||||||
} else {
|
} else {
|
||||||
dataManagementPlanCriteria.setIsPublic(true);
|
|
||||||
dataManagementPlanCriteria.setOnlyPublic(true);
|
|
||||||
datasetCriteria.setIsPublic(true);
|
|
||||||
dmpList = dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria);
|
|
||||||
datasetList = datasetRepository.getWithCriteria(datasetCriteria);
|
datasetList = datasetRepository.getWithCriteria(datasetCriteria);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isAuthenticated) {
|
||||||
|
|
||||||
|
List<Integer> roles = new LinkedList<>();
|
||||||
|
dmpList = dataManagementPlanRepository.getAuthenticated(dmpList, principal.getId(), roles);
|
||||||
|
datasetList = datasetRepository.getAuthenticated(datasetList, user, roles);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*CompletableFuture future = CompletableFuture.runAsync(() -> */{
|
/*CompletableFuture future = CompletableFuture.runAsync(() -> */{
|
||||||
recentActivityModels.addAll(dmpList
|
recentActivityModels.addAll(dmpList
|
||||||
.withHint(HintedModelFactory.getHint(RecentDmpModel.class))
|
.withHint(HintedModelFactory.getHint(RecentDmpModel.class))
|
||||||
|
|
|
@ -208,6 +208,15 @@ public class DataManagementPlanManager {
|
||||||
throw new ForbiddenException("Selected DMP is not public");
|
throw new ForbiddenException("Selected DMP is not public");
|
||||||
}
|
}
|
||||||
dataManagementPlan.fromDataModel(dataManagementPlanEntity);
|
dataManagementPlan.fromDataModel(dataManagementPlanEntity);
|
||||||
|
List<Dataset> 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) {
|
if (isPublic) {
|
||||||
dataManagementPlan.setDatasets(dataManagementPlan.getDatasets().stream().filter(dataset -> dataset.getStatus() == Dataset.Status.FINALISED.getValue()).collect(Collectors.toList()));
|
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
|
* 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;
|
boolean setNotification = false;
|
||||||
if (dataManagementPlan.getId() != null) {
|
if (dataManagementPlan.getId() != null) {
|
||||||
DMP dmp1 = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(dataManagementPlan.getId());
|
DMP dmp1 = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(dataManagementPlan.getId());
|
||||||
|
@ -412,9 +421,9 @@ public class DataManagementPlanManager {
|
||||||
.update(root -> root.<Integer>get("status"), Dataset.Status.FINALISED.getValue());
|
.update(root -> root.<Integer>get("status"), Dataset.Status.FINALISED.getValue());
|
||||||
|
|
||||||
List<UUID> datasetsToBeCanceled = new LinkedList<>();
|
List<UUID> datasetsToBeCanceled = new LinkedList<>();
|
||||||
for (DatasetListingModel dataset : dataManagementPlan.getDatasets()) {
|
for (DatasetWizardModel dataset : dataManagementPlan.getDatasets()) {
|
||||||
if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue()) && !dataManagementPlan.getDatasetsToBeFinalized().contains(UUID.fromString(dataset.getId()))) {
|
if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue()) && !dataManagementPlan.getDatasetsToBeFinalized().contains(dataset.getId())) {
|
||||||
datasetsToBeCanceled.add(UUID.fromString(dataset.getId()));
|
datasetsToBeCanceled.add(UUID.fromString(dataset.getId().toString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!datasetsToBeCanceled.isEmpty())
|
if (!datasetsToBeCanceled.isEmpty())
|
||||||
|
@ -423,9 +432,9 @@ public class DataManagementPlanManager {
|
||||||
.update(root -> root.<Integer>get("status"), Dataset.Status.CANCELED.getValue());
|
.update(root -> root.<Integer>get("status"), Dataset.Status.CANCELED.getValue());
|
||||||
} else {
|
} else {
|
||||||
List<UUID> datasetsToBeCanceled = new LinkedList<>();
|
List<UUID> datasetsToBeCanceled = new LinkedList<>();
|
||||||
for (DatasetListingModel dataset : dataManagementPlan.getDatasets()) {
|
for (DatasetWizardModel dataset : dataManagementPlan.getDatasets()) {
|
||||||
if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue())) {
|
if (!(dataset.getStatus() == (int) Dataset.Status.FINALISED.getValue())) {
|
||||||
datasetsToBeCanceled.add(UUID.fromString(dataset.getId()));
|
datasetsToBeCanceled.add(dataset.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!datasetsToBeCanceled.isEmpty())
|
if (!datasetsToBeCanceled.isEmpty())
|
||||||
|
@ -451,6 +460,20 @@ public class DataManagementPlanManager {
|
||||||
return newDmp;
|
return newDmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DMP createOrUpdateWithDatasets(DataManagementPlanEditorModel dataManagementPlan, Principal principal) throws Exception {
|
||||||
|
List<Dataset> 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 {
|
public void newVersion(UUID uuid, DataManagementPlanNewVersionModel dataManagementPlan, Principal principal) throws Exception {
|
||||||
DMP oldDmp = databaseRepository.getDmpDao().find(uuid);
|
DMP oldDmp = databaseRepository.getDmpDao().find(uuid);
|
||||||
if (!isUserOwnerOfDmp(oldDmp, principal)) {
|
if (!isUserOwnerOfDmp(oldDmp, principal)) {
|
||||||
|
@ -1381,7 +1404,7 @@ public class DataManagementPlanManager {
|
||||||
dm.setDefinition(dmpProfile);
|
dm.setDefinition(dmpProfile);
|
||||||
|
|
||||||
//createOrUpdate(apiContext, dm, principal);
|
//createOrUpdate(apiContext, dm, principal);
|
||||||
DMP dmp = this.createOrUpdate(apiContext, dm, principal);
|
DMP dmp = this.createOrUpdate(dm, principal);
|
||||||
if (dmp.getOrganisations() == null) {
|
if (dmp.getOrganisations() == null) {
|
||||||
dmp.setOrganisations(new HashSet<>());
|
dmp.setOrganisations(new HashSet<>());
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,9 @@ public class DatasetMapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dataset toElastic(eu.eudat.data.entities.Dataset dataset, List<Tag> tags) throws Exception {
|
public Dataset toElastic(eu.eudat.data.entities.Dataset dataset, List<Tag> tags) throws Exception {
|
||||||
|
if (dataset.getProfile() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
Dataset elastic = new Dataset();
|
Dataset elastic = new Dataset();
|
||||||
elastic.setId(dataset.getId().toString());
|
elastic.setId(dataset.getId().toString());
|
||||||
if (tags != null && !tags.isEmpty()) {
|
if (tags != null && !tags.isEmpty()) {
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
package eu.eudat.logic.mapper.elastic;
|
package eu.eudat.logic.mapper.elastic;
|
||||||
|
|
||||||
import eu.eudat.data.dao.criteria.DataManagementPlanCriteria;
|
import eu.eudat.data.dao.criteria.DataManagementPlanCriteria;
|
||||||
import eu.eudat.data.dao.entities.DMPDao;
|
|
||||||
import eu.eudat.data.entities.DMP;
|
import eu.eudat.data.entities.DMP;
|
||||||
import eu.eudat.elastic.entities.Collaborator;
|
|
||||||
import eu.eudat.elastic.entities.Dataset;
|
import eu.eudat.elastic.entities.Dataset;
|
||||||
import eu.eudat.elastic.entities.Dmp;
|
import eu.eudat.elastic.entities.Dmp;
|
||||||
import eu.eudat.elastic.entities.Tag;
|
import eu.eudat.elastic.entities.Tag;
|
||||||
|
@ -12,10 +10,10 @@ import eu.eudat.logic.services.ApiContext;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class DmpMapper {
|
public class DmpMapper {
|
||||||
|
@ -70,7 +68,7 @@ public class DmpMapper {
|
||||||
logger.error(e.getMessage(), e);
|
logger.error(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}).collect(Collectors.toList()));
|
}).filter(Objects::nonNull).collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
if (dmp.getAssociatedDmps() != null) {
|
if (dmp.getAssociatedDmps() != null) {
|
||||||
elastic.setTemplates(dmp.getAssociatedDmps().stream().map(DatasetTemplateMapper::toElastic).collect(Collectors.toList()));
|
elastic.setTemplates(dmp.getAssociatedDmps().stream().map(DatasetTemplateMapper::toElastic).collect(Collectors.toList()));
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.logic.utilities.documents.word;
|
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 com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import eu.eudat.logic.services.forms.VisibilityRuleService;
|
import eu.eudat.logic.services.forms.VisibilityRuleService;
|
||||||
import eu.eudat.logic.utilities.documents.types.ParagraphStyle;
|
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.DatasetProfilePage;
|
||||||
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
|
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
|
||||||
import org.apache.poi.xwpf.usermodel.*;
|
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.CTAbstractNum;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl;
|
||||||
|
@ -24,9 +22,7 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class WordBuilder {
|
public class WordBuilder {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(WordBuilder.class);
|
private static final Logger logger = LoggerFactory.getLogger(WordBuilder.class);
|
||||||
|
@ -234,15 +230,33 @@ public class WordBuilder {
|
||||||
String comboboxType = ((ComboBoxData) field.getData()).getType();
|
String comboboxType = ((ComboBoxData) field.getData()).getType();
|
||||||
if (comboboxType.equals("autocomplete")) {
|
if (comboboxType.equals("autocomplete")) {
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
|
||||||
if (field.getValue() == null) return null;
|
if (field.getValue() == null) return null;
|
||||||
Map<String, String> map = new HashMap<>();
|
List<Map<String, Object>> mapList = new ArrayList<>();
|
||||||
if (!field.getValue().equals("")) {
|
if (!field.getValue().equals("") && field.getValue().toString() != null) {
|
||||||
try {
|
try {
|
||||||
|
mapList = Arrays.asList(mapper.readValue(field.getValue().toString(), HashMap[].class));
|
||||||
|
}catch (Exception e) {
|
||||||
|
logger.warn(e.getMessage(), e);
|
||||||
|
Map <String, Object> 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());
|
JSONArray jsonarray = new JSONArray(field.getValue().toString());
|
||||||
for (int i = 0; i < jsonarray.length(); i++) {
|
for (int i = 0; i < jsonarray.length(); i++) {
|
||||||
JSONObject jsonobject = jsonarray.getJSONObject(i);
|
JSONObject jsonObject = jsonarray.getJSONObject(i);
|
||||||
String id = jsonobject.getString("id");
|
String id = jsonObject.get("id").toString();
|
||||||
String label = jsonobject.getString("label");
|
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) {
|
if (id != null && label != null) {
|
||||||
map.put(id, label);
|
map.put(id, label);
|
||||||
}
|
}
|
||||||
|
@ -251,13 +265,21 @@ public class WordBuilder {
|
||||||
Map<String, String> exMap = mapper.readValue(field.getValue().toString(), new TypeReference<Map<String, String>>() {
|
Map<String, String> exMap = mapper.readValue(field.getValue().toString(), new TypeReference<Map<String, String>>() {
|
||||||
});
|
});
|
||||||
return exMap.get("label");
|
return exMap.get("label");
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
for (Map<String, Object> map: mapList) {
|
||||||
sb.append(entry.getValue());
|
if (!map.containsKey("label") && !map.containsKey("description")) {
|
||||||
if (index != map.size() - 1) sb.append(", ");
|
logger.error("Value is missing the \"label\" and the \"description\" attributes");
|
||||||
|
map.put("label", "unknown Name");
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, Object> 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++;
|
index++;
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
|
@ -269,7 +291,7 @@ public class WordBuilder {
|
||||||
if (field.getValue() != null && field.getValue().equals("true")) return "Yes";
|
if (field.getValue() != null && field.getValue().equals("true")) return "Yes";
|
||||||
else return "No";
|
else return "No";
|
||||||
case "radiobox":
|
case "radiobox":
|
||||||
return field.getValue().toString();
|
return field.getValue() != null ? field.getValue().toString() : null;
|
||||||
case "checkBox":
|
case "checkBox":
|
||||||
CheckBoxData data = (CheckBoxData) field.getData();
|
CheckBoxData data = (CheckBoxData) field.getData();
|
||||||
if (field.getValue() == null || field.getValue().equals("false")) return null;
|
if (field.getValue() == null || field.getValue().equals("false")) return null;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package eu.eudat.models.data.dashboard.recent.model;
|
package eu.eudat.models.data.dashboard.recent.model;
|
||||||
|
|
||||||
import eu.eudat.models.DataModel;
|
import eu.eudat.models.DataModel;
|
||||||
|
import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel;
|
||||||
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
||||||
import eu.eudat.queryable.queryableentity.DataEntity;
|
import eu.eudat.queryable.queryableentity.DataEntity;
|
||||||
|
|
||||||
|
@ -20,7 +21,7 @@ public abstract class RecentActivityModel<T extends DataEntity, S extends DataMo
|
||||||
private String grantId;
|
private String grantId;
|
||||||
private Date finalizedAt;
|
private Date finalizedAt;
|
||||||
private Date publishedAt;
|
private Date publishedAt;
|
||||||
private String profile;
|
private DatasetProfileOverviewModel profile;
|
||||||
private int type;
|
private int type;
|
||||||
private List<UserInfoListingModel> users;
|
private List<UserInfoListingModel> users;
|
||||||
private Boolean isPublic;
|
private Boolean isPublic;
|
||||||
|
@ -121,11 +122,11 @@ public abstract class RecentActivityModel<T extends DataEntity, S extends DataMo
|
||||||
this.publishedAt = publishedAt;
|
this.publishedAt = publishedAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getProfile() {
|
public DatasetProfileOverviewModel getProfile() {
|
||||||
return profile;
|
return profile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProfile(String profile) {
|
public void setProfile(DatasetProfileOverviewModel profile) {
|
||||||
this.profile = profile;
|
this.profile = profile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import eu.eudat.data.entities.Dataset;
|
||||||
import eu.eudat.logic.utilities.helpers.LabelBuilder;
|
import eu.eudat.logic.utilities.helpers.LabelBuilder;
|
||||||
import eu.eudat.models.data.dataset.DataRepository;
|
import eu.eudat.models.data.dataset.DataRepository;
|
||||||
import eu.eudat.models.data.dataset.Service;
|
import eu.eudat.models.data.dataset.Service;
|
||||||
|
import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel;
|
||||||
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -70,7 +71,7 @@ public class RecentDatasetModel extends RecentActivityModel<Dataset, RecentDatas
|
||||||
this.setGrantAbbreviation(entity.getDmp() != null ? entity.getDmp().getGrant().getAbbreviation() : "");
|
this.setGrantAbbreviation(entity.getDmp() != null ? entity.getDmp().getGrant().getAbbreviation() : "");
|
||||||
this.setPublishedAt(entity.getDmp() != null ? entity.getDmp().getPublishedAt() : new Date());
|
this.setPublishedAt(entity.getDmp() != null ? entity.getDmp().getPublishedAt() : new Date());
|
||||||
this.setGrantId(entity.getDmp() != null ? entity.getDmp().getGrant().getId().toString() : "");
|
this.setGrantId(entity.getDmp() != null ? entity.getDmp().getGrant().getId().toString() : "");
|
||||||
this.setProfile(entity.getProfile() != null ? entity.getProfile().getLabel() : "");
|
this.setProfile(entity.getProfile() != null ? new DatasetProfileOverviewModel().fromDataModel(entity.getProfile()): null);
|
||||||
this.setGrant(entity.getDmp() != null ? entity.getDmp().getGrant().getLabel() : "");
|
this.setGrant(entity.getDmp() != null ? entity.getDmp().getGrant().getLabel() : "");
|
||||||
this.setDataRepositories(entity.getDatasetDataRepositories() != null && !entity.getDatasetDataRepositories().isEmpty()? LabelBuilder.getLabel(entity.getDatasetDataRepositories().stream().map(item -> new DataRepository().fromDataModel(item.getDataRepository())).collect(Collectors.toList())) : "");
|
this.setDataRepositories(entity.getDatasetDataRepositories() != null && !entity.getDatasetDataRepositories().isEmpty()? LabelBuilder.getLabel(entity.getDatasetDataRepositories().stream().map(item -> new DataRepository().fromDataModel(item.getDataRepository())).collect(Collectors.toList())) : "");
|
||||||
this.setDmp( entity.getDmp() != null ? entity.getDmp().getLabel() : "");
|
this.setDmp( entity.getDmp() != null ? entity.getDmp().getLabel() : "");
|
||||||
|
@ -95,7 +96,7 @@ public class RecentDatasetModel extends RecentActivityModel<Dataset, RecentDatas
|
||||||
this.setGrantAbbreviation(entity.getDmp() != null ? entity.getDmp().getGrant().getAbbreviation() : "");
|
this.setGrantAbbreviation(entity.getDmp() != null ? entity.getDmp().getGrant().getAbbreviation() : "");
|
||||||
this.setPublishedAt(entity.getDmp() != null ? entity.getDmp().getPublishedAt() : new Date());
|
this.setPublishedAt(entity.getDmp() != null ? entity.getDmp().getPublishedAt() : new Date());
|
||||||
this.setGrantId(entity.getDmp() != null ? entity.getDmp().getGrant().getId().toString() : "");
|
this.setGrantId(entity.getDmp() != null ? entity.getDmp().getGrant().getId().toString() : "");
|
||||||
this.setProfile(entity.getProfile() != null ? entity.getProfile().getLabel() : "");
|
this.setProfile(entity.getProfile() != null ? new DatasetProfileOverviewModel().fromDataModel(entity.getProfile()) : null);
|
||||||
this.setGrant(entity.getDmp() != null ? entity.getDmp().getGrant().getLabel() : "");
|
this.setGrant(entity.getDmp() != null ? entity.getDmp().getGrant().getLabel() : "");
|
||||||
this.setDmp( entity.getDmp() != null ? entity.getDmp().getLabel() : "");
|
this.setDmp( entity.getDmp() != null ? entity.getDmp().getLabel() : "");
|
||||||
this.setDmpId(entity.getDmp() != null ? entity.getDmp().getId().toString() : "");
|
this.setDmpId(entity.getDmp() != null ? entity.getDmp().getId().toString() : "");
|
||||||
|
|
|
@ -4,7 +4,6 @@ import eu.eudat.data.entities.DMP;
|
||||||
import eu.eudat.logic.utilities.helpers.LabelBuilder;
|
import eu.eudat.logic.utilities.helpers.LabelBuilder;
|
||||||
import eu.eudat.models.data.dmp.AssociatedProfile;
|
import eu.eudat.models.data.dmp.AssociatedProfile;
|
||||||
import eu.eudat.models.data.dmp.Organisation;
|
import eu.eudat.models.data.dmp.Organisation;
|
||||||
import eu.eudat.models.data.listingmodels.DatasetListingModel;
|
|
||||||
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
||||||
import eu.eudat.models.data.urls.DatasetUrlListing;
|
import eu.eudat.models.data.urls.DatasetUrlListing;
|
||||||
|
|
||||||
|
@ -92,7 +91,7 @@ public class RecentDmpModel extends RecentActivityModel<DMP, RecentDmpModel> {
|
||||||
this.groupId = entity.getGroupId();
|
this.groupId = entity.getGroupId();
|
||||||
this.setPublic(entity.isPublic());
|
this.setPublic(entity.isPublic());
|
||||||
this.organisations = LabelBuilder.getLabel(entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()));
|
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.setPublishedAt(entity.getPublishedAt());
|
||||||
this.setUsers(entity.getUsers().stream().map(x -> new UserInfoListingModel().fromDataModel(x)).collect(Collectors.toList()));
|
this.setUsers(entity.getUsers().stream().map(x -> new UserInfoListingModel().fromDataModel(x)).collect(Collectors.toList()));
|
||||||
return this;
|
return this;
|
||||||
|
|
|
@ -6,7 +6,6 @@ import eu.eudat.models.DataModel;
|
||||||
import eu.eudat.models.data.dataset.DataRepository;
|
import eu.eudat.models.data.dataset.DataRepository;
|
||||||
import eu.eudat.models.data.dataset.Registry;
|
import eu.eudat.models.data.dataset.Registry;
|
||||||
import eu.eudat.models.data.dataset.Service;
|
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.dmp.DataManagementPlan;
|
||||||
import eu.eudat.models.data.externaldataset.ExternalDatasetListingModel;
|
import eu.eudat.models.data.externaldataset.ExternalDatasetListingModel;
|
||||||
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
|
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
|
||||||
|
@ -191,6 +190,40 @@ public class DatasetWizardModel implements DataModel<Dataset, DatasetWizardModel
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DatasetWizardModel fromDataModelNoDmp(Dataset entity) {
|
||||||
|
this.id = entity.getId();
|
||||||
|
this.label = entity.getLabel();
|
||||||
|
this.status = entity.getStatus();
|
||||||
|
this.reference = entity.getReference();
|
||||||
|
this.description = entity.getDescription();
|
||||||
|
this.profile = entity.getProfile().getId();
|
||||||
|
this.uri = entity.getUri();
|
||||||
|
this.registries = entity.getRegistries() != null ? entity.getRegistries().stream().map(item -> 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<String, Map<String, String>> data = (Map<String, Map<String, String>>) JSONValue.parse(item.getData());
|
||||||
|
Map<String, String> 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<String, Map<String, String>> data = (Map<String, Map<String, String>>) JSONValue.parse(item.getData());
|
||||||
|
Map<String, String> 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
|
@Override
|
||||||
public Dataset toDataModel() throws Exception {
|
public Dataset toDataModel() throws Exception {
|
||||||
eu.eudat.data.entities.Dataset entity = new eu.eudat.data.entities.Dataset();
|
eu.eudat.data.entities.Dataset entity = new eu.eudat.data.entities.Dataset();
|
||||||
|
|
|
@ -3,6 +3,7 @@ package eu.eudat.models.data.dmp;
|
||||||
import eu.eudat.data.entities.*;
|
import eu.eudat.data.entities.*;
|
||||||
import eu.eudat.logic.utilities.builders.XmlBuilder;
|
import eu.eudat.logic.utilities.builders.XmlBuilder;
|
||||||
import eu.eudat.models.DataModel;
|
import eu.eudat.models.DataModel;
|
||||||
|
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
||||||
import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue;
|
import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue;
|
||||||
import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile;
|
import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile;
|
||||||
import eu.eudat.models.data.funder.Funder;
|
import eu.eudat.models.data.funder.Funder;
|
||||||
|
@ -26,7 +27,7 @@ public class DataManagementPlan implements DataModel<DMP, DataManagementPlan> {
|
||||||
private int status;
|
private int status;
|
||||||
private boolean lockable;
|
private boolean lockable;
|
||||||
private String description;
|
private String description;
|
||||||
private List<DatasetListingModel> datasets;
|
private List<DatasetWizardModel> datasets;
|
||||||
private List<AssociatedProfile> profiles;
|
private List<AssociatedProfile> profiles;
|
||||||
private Grant grant;
|
private Grant grant;
|
||||||
private List<Organisation> organisations;
|
private List<Organisation> organisations;
|
||||||
|
@ -178,10 +179,11 @@ public class DataManagementPlan implements DataModel<DMP, DataManagementPlan> {
|
||||||
this.lockable = lockable;
|
this.lockable = lockable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DatasetListingModel> getDatasets() {
|
public List<DatasetWizardModel> getDatasets() {
|
||||||
return datasets;
|
return datasets;
|
||||||
}
|
}
|
||||||
public void setDatasets(List<DatasetListingModel> datasets) {
|
|
||||||
|
public void setDatasets(List<DatasetWizardModel> datasets) {
|
||||||
this.datasets = datasets;
|
this.datasets = datasets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,8 +235,8 @@ public class DataManagementPlan implements DataModel<DMP, DataManagementPlan> {
|
||||||
public DataManagementPlan fromDataModel(DMP entity) {
|
public DataManagementPlan fromDataModel(DMP entity) {
|
||||||
this.id = entity.getId();
|
this.id = entity.getId();
|
||||||
this.profile = entity.getProfile() != null ? new Tuple<UUID, String>(entity.getProfile().getId(), entity.getProfile().getLabel()) : null;
|
this.profile = entity.getProfile() != null ? new Tuple<UUID, String>(entity.getProfile().getId(), entity.getProfile().getLabel()) : null;
|
||||||
this.organisations = entity.getOrganisations().stream().map(item -> new Organisation().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.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList());
|
this.researchers = entity.getOrganisations() != null ? entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()): new ArrayList<>();
|
||||||
this.version = entity.getVersion();
|
this.version = entity.getVersion();
|
||||||
this.groupId = this.groupId == null ? null : entity.getGroupId();
|
this.groupId = this.groupId == null ? null : entity.getGroupId();
|
||||||
this.label = entity.getLabel();
|
this.label = entity.getLabel();
|
||||||
|
@ -243,7 +245,7 @@ public class DataManagementPlan implements DataModel<DMP, DataManagementPlan> {
|
||||||
this.grant.fromDataModel(entity.getGrant());
|
this.grant.fromDataModel(entity.getGrant());
|
||||||
this.creator = new eu.eudat.models.data.userinfo.UserInfo();
|
this.creator = new eu.eudat.models.data.userinfo.UserInfo();
|
||||||
this.groupId = entity.getGroupId();
|
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());
|
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) {
|
if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) {
|
||||||
this.definition.getFields().forEach(item -> {
|
this.definition.getFields().forEach(item -> {
|
||||||
|
@ -251,7 +253,7 @@ public class DataManagementPlan implements DataModel<DMP, DataManagementPlan> {
|
||||||
if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value"));
|
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());
|
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()) {
|
if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) {
|
||||||
|
@ -261,21 +263,23 @@ public class DataManagementPlan implements DataModel<DMP, DataManagementPlan> {
|
||||||
this.profiles.add(associatedProfile);
|
this.profiles.add(associatedProfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (entity.getDataset() != null) {
|
||||||
if (entity.isPublic()) {
|
if (entity.isPublic()) {
|
||||||
this.datasets = entity.getDataset().stream()
|
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()))
|
.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());
|
.map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList());
|
||||||
} else {
|
} else {
|
||||||
this.datasets = entity.getDataset().stream()
|
this.datasets = entity.getDataset().stream()
|
||||||
.filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue()))
|
.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());
|
.map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.modified = entity.getModified();
|
this.modified = entity.getModified();
|
||||||
this.created = entity.getCreated();
|
this.created = entity.getCreated();
|
||||||
this.description = entity.getDescription();
|
this.description = entity.getDescription();
|
||||||
this.status = entity.getStatus();
|
this.status = entity.getStatus();
|
||||||
this.associatedUsers = entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).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().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList());
|
this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>();
|
||||||
this.doi = entity.getDoi();
|
this.doi = entity.getDoi();
|
||||||
|
|
||||||
if (entity.getProject() != null) {
|
if (entity.getProject() != null) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package eu.eudat.models.data.dmp;
|
||||||
import eu.eudat.data.entities.*;
|
import eu.eudat.data.entities.*;
|
||||||
import eu.eudat.logic.utilities.builders.XmlBuilder;
|
import eu.eudat.logic.utilities.builders.XmlBuilder;
|
||||||
import eu.eudat.models.DataModel;
|
import eu.eudat.models.DataModel;
|
||||||
|
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
||||||
import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue;
|
import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue;
|
||||||
import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile;
|
import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile;
|
||||||
import eu.eudat.models.data.funder.FunderDMPEditorModel;
|
import eu.eudat.models.data.funder.FunderDMPEditorModel;
|
||||||
|
@ -26,7 +27,7 @@ public class DataManagementPlanEditorModel implements DataModel<DMP, DataManagem
|
||||||
private int status;
|
private int status;
|
||||||
private boolean lockable;
|
private boolean lockable;
|
||||||
private String description;
|
private String description;
|
||||||
private List<DatasetListingModel> datasets;
|
private List<DatasetWizardModel> datasets;
|
||||||
private List<AssociatedProfile> profiles;
|
private List<AssociatedProfile> profiles;
|
||||||
private eu.eudat.models.data.grant.GrantDMPEditorModel grant;
|
private eu.eudat.models.data.grant.GrantDMPEditorModel grant;
|
||||||
private List<Organisation> organisations;
|
private List<Organisation> organisations;
|
||||||
|
@ -177,10 +178,11 @@ public class DataManagementPlanEditorModel implements DataModel<DMP, DataManagem
|
||||||
this.lockable = lockable;
|
this.lockable = lockable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DatasetListingModel> getDatasets() {
|
public List<DatasetWizardModel> getDatasets() {
|
||||||
return datasets;
|
return datasets;
|
||||||
}
|
}
|
||||||
public void setDatasets(List<DatasetListingModel> datasets) {
|
|
||||||
|
public void setDatasets(List<DatasetWizardModel> datasets) {
|
||||||
this.datasets = datasets;
|
this.datasets = datasets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +255,7 @@ public class DataManagementPlanEditorModel implements DataModel<DMP, DataManagem
|
||||||
this.profiles.add(associatedProfile);
|
this.profiles.add(associatedProfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.datasets = entity.getDataset().stream().map(item -> 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.modified = entity.getModified();
|
||||||
this.created = entity.getCreated();
|
this.created = entity.getCreated();
|
||||||
this.description = entity.getDescription();
|
this.description = entity.getDescription();
|
||||||
|
|
|
@ -176,12 +176,12 @@ public class DataManagementPlanOverviewModel implements DataModel<DMP, DataManag
|
||||||
this.id = entity.getId().toString();
|
this.id = entity.getId().toString();
|
||||||
this.label = entity.getLabel();
|
this.label = entity.getLabel();
|
||||||
this.groupId = entity.getGroupId();
|
this.groupId = entity.getGroupId();
|
||||||
|
this.status = entity.getStatus();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataManagementPlanOverviewModel fromDataModelDatasets(DMP entity) {
|
public DataManagementPlanOverviewModel fromDataModelDatasets(DMP entity) {
|
||||||
this.fromDataModel(entity);
|
this.fromDataModel(entity);
|
||||||
this.status = entity.getStatus();
|
|
||||||
this.version = entity.getVersion();
|
this.version = entity.getVersion();
|
||||||
this.grant = new GrantOverviewModel().fromDataModel(entity.getGrant());
|
this.grant = new GrantOverviewModel().fromDataModel(entity.getGrant());
|
||||||
if (entity.getProfile() != null) this.profile = entity.getProfile().getLabel();
|
if (entity.getProfile() != null) this.profile = entity.getProfile().getLabel();
|
||||||
|
|
|
@ -5,6 +5,7 @@ import eu.eudat.models.DataModel;
|
||||||
import eu.eudat.models.data.dataset.DataRepository;
|
import eu.eudat.models.data.dataset.DataRepository;
|
||||||
import eu.eudat.models.data.dataset.Service;
|
import eu.eudat.models.data.dataset.Service;
|
||||||
import eu.eudat.logic.utilities.helpers.LabelBuilder;
|
import eu.eudat.logic.utilities.helpers.LabelBuilder;
|
||||||
|
import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -18,7 +19,7 @@ public class DatasetListingModel implements DataModel<Dataset, DatasetListingMod
|
||||||
private String grant;
|
private String grant;
|
||||||
private String dmp;
|
private String dmp;
|
||||||
private String dmpId;
|
private String dmpId;
|
||||||
private String profile;
|
private DatasetProfileOverviewModel profile;
|
||||||
private String dataRepositories;
|
private String dataRepositories;
|
||||||
private String registries;
|
private String registries;
|
||||||
private String services;
|
private String services;
|
||||||
|
@ -70,10 +71,11 @@ public class DatasetListingModel implements DataModel<Dataset, DatasetListingMod
|
||||||
this.dmpId = dmpId;
|
this.dmpId = dmpId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getProfile() {
|
public DatasetProfileOverviewModel getProfile() {
|
||||||
return profile;
|
return profile;
|
||||||
}
|
}
|
||||||
public void setProfile(String profile) {
|
|
||||||
|
public void setProfile(DatasetProfileOverviewModel profile) {
|
||||||
this.profile = profile;
|
this.profile = profile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +196,7 @@ public class DatasetListingModel implements DataModel<Dataset, DatasetListingMod
|
||||||
this.grant = entity.getDmp() != null ? entity.getDmp().getGrant().getLabel() : "";
|
this.grant = entity.getDmp() != null ? entity.getDmp().getGrant().getLabel() : "";
|
||||||
this.dmp = entity.getDmp() != null ? entity.getDmp().getLabel() : "";
|
this.dmp = entity.getDmp() != null ? entity.getDmp().getLabel() : "";
|
||||||
this.dmpId = entity.getDmp() != null ? entity.getDmp().getId().toString() : "";
|
this.dmpId = entity.getDmp() != null ? entity.getDmp().getId().toString() : "";
|
||||||
this.profile = entity.getProfile() != null ? entity.getProfile().getLabel() : "";
|
this.profile = entity.getProfile() != null ? new DatasetProfileOverviewModel().fromDataModel(entity.getProfile()) : null;
|
||||||
this.description = entity.getDescription();
|
this.description = entity.getDescription();
|
||||||
this.status = entity.getStatus();
|
this.status = entity.getStatus();
|
||||||
this.grantAbbreviation = entity.getDmp() != null ? entity.getDmp().getGrant().getAbbreviation() : "";
|
this.grantAbbreviation = entity.getDmp() != null ? entity.getDmp().getGrant().getAbbreviation() : "";
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { DatasetProfileModel } from './dataset-profile';
|
||||||
|
|
||||||
export interface DatasetListingModel {
|
export interface DatasetListingModel {
|
||||||
id: string;
|
id: string;
|
||||||
label: String;
|
label: String;
|
||||||
|
@ -6,7 +8,7 @@ export interface DatasetListingModel {
|
||||||
grant: String;
|
grant: String;
|
||||||
grantId: String;
|
grantId: String;
|
||||||
grantAbbreviation: String;
|
grantAbbreviation: String;
|
||||||
profile: String;
|
profile: DatasetProfileModel;
|
||||||
dataRepositories: String;
|
dataRepositories: String;
|
||||||
registries: String;
|
registries: String;
|
||||||
services: String;
|
services: String;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { RecentActivityType } from '@app/core/common/enum/recent-activity-type';
|
import { RecentActivityType } from '@app/core/common/enum/recent-activity-type';
|
||||||
import { UserInfoListingModel } from '../user/user-info-listing';
|
import { UserInfoListingModel } from '../user/user-info-listing';
|
||||||
|
import { DatasetProfileModel } from '../dataset/dataset-profile';
|
||||||
|
|
||||||
export class RecentActivityModel {
|
export class RecentActivityModel {
|
||||||
id: string;
|
id: string;
|
||||||
|
@ -14,7 +15,7 @@ export class RecentActivityModel {
|
||||||
grantId: String;
|
grantId: String;
|
||||||
finalizedAt: Date;
|
finalizedAt: Date;
|
||||||
publishedAt: Date;
|
publishedAt: Date;
|
||||||
profile: String;
|
profile: DatasetProfileModel;
|
||||||
type: RecentActivityType;
|
type: RecentActivityType;
|
||||||
users: UserInfoListingModel[];
|
users: UserInfoListingModel[];
|
||||||
public: boolean;
|
public: boolean;
|
||||||
|
|
|
@ -70,6 +70,10 @@ export class DmpService {
|
||||||
return this.http.post<String>(this.actionUrl, dataManagementPlanModel, { headers: this.headers });
|
return this.http.post<String>(this.actionUrl, dataManagementPlanModel, { headers: this.headers });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
createDmpWithDatasets(dataManagementPlanModel: DmpModel): Observable<String> {
|
||||||
|
return this.http.post<String>(this.actionUrl + 'full', dataManagementPlanModel, { headers: this.headers });
|
||||||
|
}
|
||||||
|
|
||||||
inactivate(id: String): Observable<DmpModel> {
|
inactivate(id: String): Observable<DmpModel> {
|
||||||
return this.http.delete<DmpModel>(this.actionUrl + 'inactivate/' + id, { headers: this.headers });
|
return this.http.delete<DmpModel>(this.actionUrl + 'inactivate/' + id, { headers: this.headers });
|
||||||
}
|
}
|
||||||
|
@ -98,12 +102,12 @@ export class DmpService {
|
||||||
return this.http.post<DmpModel>(this.actionUrl + 'finalize/' + id, datasetsToBeFinalized, { headers: this.headers });
|
return this.http.post<DmpModel>(this.actionUrl + 'finalize/' + id, datasetsToBeFinalized, { headers: this.headers });
|
||||||
}
|
}
|
||||||
|
|
||||||
unfinalize( id: String): Observable<DmpModel> {
|
unfinalize(id: String): Observable<DmpModel> {
|
||||||
return this.http.post<DmpModel>(this.actionUrl + 'unfinalize/' + id, { headers: this.headers });
|
return this.http.post<DmpModel>(this.actionUrl + 'unfinalize/' + id, { headers: this.headers });
|
||||||
}
|
}
|
||||||
|
|
||||||
updateUsers(id: string, users: UserInfoListingModel[]): Observable<DmpModel> {
|
updateUsers(id: string, users: UserInfoListingModel[]): Observable<DmpModel> {
|
||||||
return this.http.post<DmpModel>(`${this.actionUrl}updateusers/${id}`, users, {headers: this.headers});
|
return this.http.post<DmpModel>(`${this.actionUrl}updateusers/${id}`, users, { headers: this.headers });
|
||||||
}
|
}
|
||||||
|
|
||||||
getDoi(id: string): Observable<string> {
|
getDoi(id: string): Observable<string> {
|
||||||
|
|
|
@ -67,8 +67,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer laptop-img"></div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card-footer laptop-img"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -322,8 +322,9 @@ span.zenodoIcon {
|
||||||
width: 116px;
|
width: 116px;
|
||||||
height: 200px;
|
height: 200px;
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 58px;
|
top: -140px;
|
||||||
left: 243px;
|
left: 243px;
|
||||||
|
border-top: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-bg {
|
.login-bg {
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngFor="let activity of datasetDrafts">
|
<div *ngFor="let activity of datasetDrafts">
|
||||||
<div class="dataset-card">
|
<div class="dataset-card">
|
||||||
<div [routerLink]="['../datasets/overview/' + activity.id]" class="pointer">
|
<a [routerLink]="['../datasets/overview/' + activity.id]" target="_blank" class="pointer">
|
||||||
<div class="d-flex flex-direction-row">
|
<div class="d-flex flex-direction-row">
|
||||||
<div class="col-auto dataset-label">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}</div>
|
<div class="col-auto dataset-label">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}</div>
|
||||||
<div class="col-auto ml-auto edited-date">{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}</div>
|
<div class="col-auto ml-auto edited-date">{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}</div>
|
||||||
|
@ -37,13 +37,13 @@
|
||||||
<span class="col">{{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}</span>
|
<span class="col">{{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-direction-row pt-3 pb-3">
|
<div class="d-flex flex-direction-row pt-3 pb-3">
|
||||||
<div class="col-auto dataset-subtitle">{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}}
|
<div class="col-auto dataset-subtitle pr-0">{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}}
|
||||||
<div class="col-auto dmp-label ml-4">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div>
|
<div class="col-auto dmp-label ml-3">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="col-auto dmp-label">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div> -->
|
<!-- <div class="col-auto dmp-label">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div> -->
|
||||||
<div class="col dmp-title">{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{activity.dmp}}</div>
|
<div class="col dmp-title">{{activity.dmp}}</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</a>
|
||||||
<div class="dataset-card-actions">
|
<div class="dataset-card-actions">
|
||||||
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" (click)="openShareDialog(activity.dmpId, activity.dmp)"><span class="material-icons icon-align pr-2">group_add</span>{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}}</a>
|
<a class="col-auto border-right pointer" (click)="openShareDialog(activity.dmpId, activity.dmp)"><span class="material-icons icon-align pr-2">group_add</span>{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}}</a>
|
||||||
|
@ -51,10 +51,10 @@
|
||||||
<!-- <a class="col-auto" [matMenuTriggerFor]="actionsMenu" *ngIf="!publicMode"><span class="material-icons icon-align pl-2">more_horiz</span></a> -->
|
<!-- <a class="col-auto" [matMenuTriggerFor]="actionsMenu" *ngIf="!publicMode"><span class="material-icons icon-align pl-2">more_horiz</span></a> -->
|
||||||
</div>
|
</div>
|
||||||
<mat-menu #actionsMenu="matMenu">
|
<mat-menu #actionsMenu="matMenu">
|
||||||
<button mat-menu-item (click)="openDmpSearchDialogue(activity.id)" class="menu-item">
|
<button mat-menu-item (click)="openDmpSearchDialogue(activity)" class="menu-item">
|
||||||
<mat-icon>file_copy</mat-icon>{{'DATASET-WIZARD.ACTIONS.COPY-DATASET' | translate}}
|
<mat-icon>file_copy</mat-icon>{{'DATASET-WIZARD.ACTIONS.COPY-DATASET' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item (click)="openConfirm(activity.id)" class="menu-item">
|
<button mat-menu-item (click)="deleteClicked(activity.id)" class="menu-item">
|
||||||
<mat-icon>delete</mat-icon>{{ 'DATASET-WIZARD.ACTIONS.DELETE' | translate }}
|
<mat-icon>delete</mat-icon>{{ 'DATASET-WIZARD.ACTIONS.DELETE' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<!-- <button mat-menu-item *ngIf="needsUpdate(activity)" class="menu-item" (click)="openUpdateDatasetProfileDialogue(activity.id);">
|
<!-- <button mat-menu-item *ngIf="needsUpdate(activity)" class="menu-item" (click)="openUpdateDatasetProfileDialogue(activity.id);">
|
||||||
|
|
|
@ -23,6 +23,8 @@ import { UiNotificationService } from '@app/core/services/notification/ui-notifi
|
||||||
import { DmpInvitationDialogComponent } from '@app/ui/dmp/invitation/dmp-invitation-dialog.component';
|
import { DmpInvitationDialogComponent } from '@app/ui/dmp/invitation/dmp-invitation-dialog.component';
|
||||||
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
|
import { Role } from '@app/core/common/enum/role';
|
||||||
|
import { LockService } from '@app/core/services/lock/lock.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-drafts',
|
selector: 'app-drafts',
|
||||||
|
@ -57,7 +59,8 @@ export class DraftsComponent extends BaseComponent implements OnInit {
|
||||||
private datasetWizardService: DatasetWizardService,
|
private datasetWizardService: DatasetWizardService,
|
||||||
public enumUtils: EnumUtils,
|
public enumUtils: EnumUtils,
|
||||||
private uiNotificationService: UiNotificationService,
|
private uiNotificationService: UiNotificationService,
|
||||||
private location: Location
|
private location: Location,
|
||||||
|
private lockService: LockService
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -140,7 +143,7 @@ export class DraftsComponent extends BaseComponent implements OnInit {
|
||||||
data: {
|
data: {
|
||||||
formControl: formControl,
|
formControl: formControl,
|
||||||
datasetId: dataset.id,
|
datasetId: dataset.id,
|
||||||
datasetProfileId: dataset.profile,
|
datasetProfileId: dataset.profile.id,
|
||||||
datasetProfileExist: false,
|
datasetProfileExist: false,
|
||||||
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
||||||
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
|
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
|
||||||
|
@ -150,13 +153,25 @@ export class DraftsComponent extends BaseComponent implements OnInit {
|
||||||
dialogRef.afterClosed().pipe(takeUntil(this._destroyed))
|
dialogRef.afterClosed().pipe(takeUntil(this._destroyed))
|
||||||
.subscribe(result => {
|
.subscribe(result => {
|
||||||
if (result && result.datasetProfileExist) {
|
if (result && result.datasetProfileExist) {
|
||||||
const newDmpId = result.formControl.value.id
|
const newDmpId = result.formControl.value.id;
|
||||||
this.router.navigate(['/datasets/copy/' + result.datasetId], { queryParams: { newDmpId: newDmpId } });
|
let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId } ]);
|
||||||
|
window.open(url.toString(), '_blank');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
openConfirm(id: string): void {
|
deleteClicked(id: string) {
|
||||||
|
this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed))
|
||||||
|
.subscribe(lockStatus => {
|
||||||
|
if (!lockStatus) {
|
||||||
|
this.openDeleteDialog(id);
|
||||||
|
} else {
|
||||||
|
this.openLockedByUserDialog();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
openDeleteDialog(id: string): void {
|
||||||
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
maxWidth: '300px',
|
maxWidth: '300px',
|
||||||
restoreFocus: false,
|
restoreFocus: false,
|
||||||
|
@ -179,6 +194,16 @@ export class DraftsComponent extends BaseComponent implements OnInit {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
openLockedByUserDialog() {
|
||||||
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
|
maxWidth: '400px',
|
||||||
|
restoreFocus: false,
|
||||||
|
data: {
|
||||||
|
message: this.language.instant('DATASET-WIZARD.ACTIONS.LOCK')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
openShareDialog(dmpRowId: any, dmpRowName: any) {
|
openShareDialog(dmpRowId: any, dmpRowName: any) {
|
||||||
const dialogRef = this.dialog.open(DmpInvitationDialogComponent, {
|
const dialogRef = this.dialog.open(DmpInvitationDialogComponent, {
|
||||||
// height: '250px',
|
// height: '250px',
|
||||||
|
@ -191,6 +216,11 @@ export class DraftsComponent extends BaseComponent implements OnInit {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isUserOwner(activity: DatasetListingModel): boolean {
|
||||||
|
const principal: Principal = this.authentication.current();
|
||||||
|
if (principal) return principal.id === activity.users.find(x => x.role === Role.Owner).id;
|
||||||
|
}
|
||||||
|
|
||||||
onCallbackSuccess(id?: String): void {
|
onCallbackSuccess(id?: String): void {
|
||||||
this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
|
this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
|
||||||
id ? this.router.navigate(['/reload']).then(() => { this.router.navigate(['/datasets', 'edit', id]); }) : this.router.navigate(['/datasets']);
|
id ? this.router.navigate(['/reload']).then(() => { this.router.navigate(['/datasets', 'edit', id]); }) : this.router.navigate(['/datasets']);
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<div *ngFor="let activity of allRecentActivities">
|
<div *ngFor="let activity of allRecentActivities">
|
||||||
<div *ngIf="activity && activity.type === recentActivityTypeEnum.Dmp.valueOf()">
|
<div *ngIf="activity && activity.type === recentActivityTypeEnum.Dmp.valueOf()">
|
||||||
<div class="dmp-card">
|
<div class="dmp-card">
|
||||||
<div [routerLink]="['../plans/overview/' + activity.id]" class="pointer">
|
<a [routerLink]="['../plans/overview/' + activity.id]" target="_blank" class="pointer">
|
||||||
<div class="d-flex flex-direction-row">
|
<div class="d-flex flex-direction-row">
|
||||||
<div class="col-auto dmp-label">{{ 'DMP-LISTING.DMP' | translate }}</div>
|
<div class="col-auto dmp-label">{{ 'DMP-LISTING.DMP' | translate }}</div>
|
||||||
<div class="col-auto ml-auto edited-date">{{ 'DMP-LISTING.EDITED' | translate }}: {{ activity.modified | date: "longDate" }}</div>
|
<div class="col-auto ml-auto edited-date">{{ 'DMP-LISTING.EDITED' | translate }}: {{ activity.modified | date: "longDate" }}</div>
|
||||||
|
@ -48,12 +48,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a class="d-flex justify-content-center pb-3 show-more" *ngIf="getDatasets(activity).length > 3" [routerLink]="['../plans/overview/' + activity.id]"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a>
|
<a class="d-flex justify-content-center pb-3 show-more" *ngIf="getDatasets(activity).length > 3" [routerLink]="['../plans/overview/' + activity.id]"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a>
|
||||||
</div>
|
</a>
|
||||||
<div class="dmp-card-actions">
|
<div class="dmp-card-actions">
|
||||||
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" *ngIf="isDraftDmp(activity) && isUserOwner" (click)="addDataset(activity.id)"><span class="material-icons icon-align">add</span>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isDraftDmp(activity)" [routerLink]="['/datasets/new/' + activity.id]" target="_blank"><span class="material-icons icon-align">add</span>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" *ngIf="isUserOwner"(click)="openShareDialog(activity.id, activity.title)"><span class="material-icons icon-align pr-2">group_add</span>{{'DMP-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isUserOwner(activity)" (click)="openShareDialog(activity.id, activity.title)"><span class="material-icons icon-align pr-2">group_add</span>{{'DMP-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" *ngIf="isAuthenticated()" (click)="cloneClicked(activity)"><span class="material-icons icon-align pr-2">filter_none</span>{{'DMP-LISTING.ACTIONS.CLONE' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isAuthenticated()" [routerLink]="['/plans/clone/' + activity.id]" target="_blank"><span class="material-icons icon-align pr-2">filter_none</span>{{'DMP-LISTING.ACTIONS.CLONE' | translate}}</a>
|
||||||
<a class="col-auto pointer" [matMenuTriggerFor]="actionsMenu"><span class="material-icons icon-align pl-2">more_horiz</span></a>
|
<a class="col-auto pointer" [matMenuTriggerFor]="actionsMenu"><span class="material-icons icon-align pl-2">more_horiz</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
<button mat-menu-item (click)="viewVersions(getGroupId(activity), activity.title, activity)">
|
<button mat-menu-item (click)="viewVersions(getGroupId(activity), activity.title, activity)">
|
||||||
<mat-icon>library_books</mat-icon>{{'DMP-LISTING.ACTIONS.VIEW-VERSION' | translate}}
|
<mat-icon>library_books</mat-icon>{{'DMP-LISTING.ACTIONS.VIEW-VERSION' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item *ngIf="isUserOwner(activity)" (click)="deleteClicked(activity)" class="menu-item">
|
<button mat-menu-item *ngIf="isUserOwner(activity)" (click)="deleteDmpClicked(activity)" class="menu-item">
|
||||||
<mat-icon>delete</mat-icon>{{ 'DMP-LISTING.ACTIONS.DELETE' | translate }}
|
<mat-icon>delete</mat-icon>{{ 'DMP-LISTING.ACTIONS.DELETE' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
|
@ -90,7 +90,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="activity && activity.type === recentActivityTypeEnum.Dataset.valueOf()">
|
<div *ngIf="activity && activity.type === recentActivityTypeEnum.Dataset.valueOf()">
|
||||||
<div class="dataset-card">
|
<div class="dataset-card">
|
||||||
<div [routerLink]="['../datasets/overview/' + activity.id]" class="pointer">
|
<a [routerLink]="['../datasets/overview/' + activity.id]" target="_blank" class="pointer">
|
||||||
<div class="d-flex flex-direction-row">
|
<div class="d-flex flex-direction-row">
|
||||||
<div class="col-auto dataset-label">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}</div>
|
<div class="col-auto dataset-label">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}</div>
|
||||||
<div class="col-auto ml-auto edited-date">{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}</div>
|
<div class="col-auto ml-auto edited-date">{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}</div>
|
||||||
|
@ -106,13 +106,13 @@
|
||||||
<span class="col">{{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}</span>
|
<span class="col">{{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-direction-row pt-3 pb-3">
|
<div class="d-flex flex-direction-row pt-3 pb-3">
|
||||||
<div class="col-auto dataset-subtitle">{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}}
|
<div class="col-auto dataset-subtitle pr-0">{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}}
|
||||||
<div class="col-auto dmp-label ml-4">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div>
|
<div class="col-auto dmp-label ml-3">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="col-auto dmp-label">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div> -->
|
<!-- <div class="col-auto dmp-label">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div> -->
|
||||||
<div class="col dmp-title">{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{ getDmp(activity) }}</div>
|
<div class="col dmp-title">{{ getDmp(activity) }}</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</a>
|
||||||
<div class="dataset-card-actions">
|
<div class="dataset-card-actions">
|
||||||
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" (click)="openShareDialog(getDmpId(activity), getDmp(activity))"><span class="material-icons icon-align pr-2">group_add</span>{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}}</a>
|
<a class="col-auto border-right pointer" (click)="openShareDialog(getDmpId(activity), getDmp(activity))"><span class="material-icons icon-align pr-2">group_add</span>{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}}</a>
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
<button mat-menu-item (click)="openDmpSearchDialogue(activity)" class="menu-item">
|
<button mat-menu-item (click)="openDmpSearchDialogue(activity)" class="menu-item">
|
||||||
<mat-icon>file_copy</mat-icon>{{'DATASET-WIZARD.ACTIONS.COPY-DATASET' | translate}}
|
<mat-icon>file_copy</mat-icon>{{'DATASET-WIZARD.ACTIONS.COPY-DATASET' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item (click)="openConfirm(activity.id)" class="menu-item">
|
<button mat-menu-item (click)="deleteDatasetClicked(activity.id)" class="menu-item">
|
||||||
<mat-icon>delete</mat-icon>{{ 'DATASET-WIZARD.ACTIONS.DELETE' | translate }}
|
<mat-icon>delete</mat-icon>{{ 'DATASET-WIZARD.ACTIONS.DELETE' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<!-- <button mat-menu-item *ngIf="needsUpdate(activity)" class="menu-item" (click)="openUpdateDatasetProfileDialogue(activity.id);">
|
<!-- <button mat-menu-item *ngIf="needsUpdate(activity)" class="menu-item" (click)="openUpdateDatasetProfileDialogue(activity.id);">
|
||||||
|
|
|
@ -31,6 +31,7 @@ import { FormControl, FormBuilder } from '@angular/forms';
|
||||||
import { DatasetCopyDialogueComponent } from '@app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component';
|
import { DatasetCopyDialogueComponent } from '@app/ui/dataset/dataset-wizard/dataset-copy-dialogue/dataset-copy-dialogue.component';
|
||||||
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
|
import { LockService } from '@app/core/services/lock/lock.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-recent-edited-activity',
|
selector: 'app-recent-edited-activity',
|
||||||
|
@ -66,7 +67,8 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn
|
||||||
private dialog: MatDialog,
|
private dialog: MatDialog,
|
||||||
private uiNotificationService: UiNotificationService,
|
private uiNotificationService: UiNotificationService,
|
||||||
private datasetWizardService: DatasetWizardService,
|
private datasetWizardService: DatasetWizardService,
|
||||||
private location: Location
|
private location: Location,
|
||||||
|
private lockService: LockService
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -139,12 +141,18 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn
|
||||||
this.router.navigate(['/plans/edit/' + dmp.id]);
|
this.router.navigate(['/plans/edit/' + dmp.id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
cloneClicked(dmp: DmpListingModel) {
|
deleteDmpClicked(dmp: DmpListingModel) {
|
||||||
let url = this.router.createUrlTree(['/plans/clone/', dmp.id]);
|
this.lockService.checkLockStatus(dmp.id).pipe(takeUntil(this._destroyed))
|
||||||
window.open(url.toString(), '_blank');
|
.subscribe(lockStatus => {
|
||||||
|
if (!lockStatus) {
|
||||||
|
this.openDeleteDmpDialog(dmp);
|
||||||
|
} else {
|
||||||
|
this.openDmpLockedByUserDialog();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteClicked(dmp: DmpListingModel) {
|
openDeleteDmpDialog(dmp: DmpListingModel) {
|
||||||
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
maxWidth: '300px',
|
maxWidth: '300px',
|
||||||
restoreFocus: false,
|
restoreFocus: false,
|
||||||
|
@ -167,6 +175,16 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
openDmpLockedByUserDialog() {
|
||||||
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
|
maxWidth: '400px',
|
||||||
|
restoreFocus: false,
|
||||||
|
data: {
|
||||||
|
message: this.language.instant('DMP-EDITOR.ACTIONS.LOCK')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
openShareDialog(rowId: any, rowName: any) {
|
openShareDialog(rowId: any, rowName: any) {
|
||||||
const dialogRef = this.dialog.open(DmpInvitationDialogComponent, {
|
const dialogRef = this.dialog.open(DmpInvitationDialogComponent, {
|
||||||
// height: '250px',
|
// height: '250px',
|
||||||
|
@ -352,19 +370,20 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
addDataset(activityId: String) {
|
|
||||||
this.router.navigate(['/datasets/new/' + activityId]);
|
|
||||||
}
|
|
||||||
|
|
||||||
newVersion(id: String, label: String) {
|
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) {
|
viewVersions(rowId: String, rowLabel: String, activity: DmpListingModel) {
|
||||||
if (activity.public && !this.isUserOwner) {
|
if (activity.public && !this.isUserOwner(activity)) {
|
||||||
this.router.navigate(['/explore-plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } });
|
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 {
|
} 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 } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -376,7 +395,7 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn
|
||||||
data: {
|
data: {
|
||||||
formControl: formControl,
|
formControl: formControl,
|
||||||
datasetId: dataset.id,
|
datasetId: dataset.id,
|
||||||
datasetProfileId: dataset.profile,
|
datasetProfileId: dataset.profile.id,
|
||||||
datasetProfileExist: false,
|
datasetProfileExist: false,
|
||||||
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
||||||
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
|
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
|
||||||
|
@ -386,13 +405,26 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn
|
||||||
dialogRef.afterClosed().pipe(takeUntil(this._destroyed))
|
dialogRef.afterClosed().pipe(takeUntil(this._destroyed))
|
||||||
.subscribe(result => {
|
.subscribe(result => {
|
||||||
if (result && result.datasetProfileExist) {
|
if (result && result.datasetProfileExist) {
|
||||||
const newDmpId = result.formControl.value.id
|
const newDmpId = result.formControl.value.id;
|
||||||
this.router.navigate(['/datasets/copy/' + result.datasetId], { queryParams: { newDmpId: newDmpId } });
|
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 } });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
openConfirm(id: string): void {
|
deleteDatasetClicked(id: string) {
|
||||||
|
this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed))
|
||||||
|
.subscribe(lockStatus => {
|
||||||
|
if (!lockStatus) {
|
||||||
|
this.openDeleteDatasetDialog(id);
|
||||||
|
} else {
|
||||||
|
this.openDatasetLockedByUserDialog();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
openDeleteDatasetDialog(id: string): void {
|
||||||
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
maxWidth: '300px',
|
maxWidth: '300px',
|
||||||
restoreFocus: false,
|
restoreFocus: false,
|
||||||
|
@ -415,6 +447,16 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
openDatasetLockedByUserDialog() {
|
||||||
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
|
maxWidth: '400px',
|
||||||
|
restoreFocus: false,
|
||||||
|
data: {
|
||||||
|
message: this.language.instant('DATASET-WIZARD.ACTIONS.LOCK')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
refresh(): void {
|
refresh(): void {
|
||||||
const fields: Array<string> = [];
|
const fields: Array<string> = [];
|
||||||
// const fields: Array<string> = ["-modified"];
|
// const fields: Array<string> = ["-modified"];
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngFor="let activity of datasetActivities">
|
<div *ngFor="let activity of datasetActivities">
|
||||||
<div class="dataset-card">
|
<div class="dataset-card">
|
||||||
<div [routerLink]="['../datasets/overview/' + activity.id]" class="pointer">
|
<a [routerLink]="['../datasets/overview/' + activity.id]" target="_blank" class="pointer">
|
||||||
<div class="d-flex flex-direction-row">
|
<div class="d-flex flex-direction-row">
|
||||||
<div class="col-auto dataset-label">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}</div>
|
<div class="col-auto dataset-label">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}</div>
|
||||||
<div class="col-auto ml-auto edited-date">{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}</div>
|
<div class="col-auto ml-auto edited-date">{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{activity.modified | date:"longDate"}}</div>
|
||||||
|
@ -37,13 +37,13 @@
|
||||||
<span class="col">{{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}</span>
|
<span class="col">{{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{activity.grant}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-direction-row pt-3 pb-3">
|
<div class="d-flex flex-direction-row pt-3 pb-3">
|
||||||
<div class="col-auto dataset-subtitle">{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}}
|
<div class="col-auto dataset-subtitle pr-0">{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}}
|
||||||
<div class="col-auto dmp-label ml-4">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div>
|
<div class="col-auto dmp-label ml-3">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="col-auto dmp-label">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div> -->
|
<!-- <div class="col-auto dmp-label">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div> -->
|
||||||
<div class="col dmp-title">{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{activity.dmp}}</div>
|
<div class="col dmp-title">{{activity.dmp}}</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</a>
|
||||||
<div class="dataset-card-actions">
|
<div class="dataset-card-actions">
|
||||||
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DATASET-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" *ngIf="isUserOwner(activity)" (click)="openShareDialog(activity.dmpId, activity.dmp)"><span class="material-icons icon-align pr-2">group_add</span>{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isUserOwner(activity)" (click)="openShareDialog(activity.dmpId, activity.dmp)"><span class="material-icons icon-align pr-2">group_add</span>{{'DATASET-LISTING.ACTIONS.INVITE-COLLABORATORS' | translate}}</a>
|
||||||
|
@ -51,10 +51,10 @@
|
||||||
<!-- <a class="col-auto" [matMenuTriggerFor]="actionsMenu" *ngIf="!publicMode"><span class="material-icons icon-align pl-2">more_horiz</span></a> -->
|
<!-- <a class="col-auto" [matMenuTriggerFor]="actionsMenu" *ngIf="!publicMode"><span class="material-icons icon-align pl-2">more_horiz</span></a> -->
|
||||||
</div>
|
</div>
|
||||||
<mat-menu #actionsMenu="matMenu">
|
<mat-menu #actionsMenu="matMenu">
|
||||||
<button mat-menu-item *ngIf="isAuthenticated()" (click)="openDmpSearchDialogue(activity.id)" class="menu-item">
|
<button mat-menu-item *ngIf="isAuthenticated()" (click)="openDmpSearchDialogue(activity)" class="menu-item">
|
||||||
<mat-icon>file_copy</mat-icon>{{'DATASET-WIZARD.ACTIONS.COPY-DATASET' | translate}}
|
<mat-icon>file_copy</mat-icon>{{'DATASET-WIZARD.ACTIONS.COPY-DATASET' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item *ngIf="isUserOwner(activity)" (click)="openConfirm(activity.id)" class="menu-item">
|
<button mat-menu-item (click)="deleteClicked(activity.id)" class="menu-item">
|
||||||
<mat-icon>delete</mat-icon>{{ 'DATASET-WIZARD.ACTIONS.DELETE' | translate }}
|
<mat-icon>delete</mat-icon>{{ 'DATASET-WIZARD.ACTIONS.DELETE' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<!-- <button mat-menu-item *ngIf="needsUpdate(activity)" class="menu-item" (click)="openUpdateDatasetProfileDialogue(activity.id);">
|
<!-- <button mat-menu-item *ngIf="needsUpdate(activity)" class="menu-item" (click)="openUpdateDatasetProfileDialogue(activity.id);">
|
||||||
|
|
|
@ -24,6 +24,7 @@ import { DmpInvitationDialogComponent } from '@app/ui/dmp/invitation/dmp-invitat
|
||||||
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
||||||
import { Role } from '@app/core/common/enum/role';
|
import { Role } from '@app/core/common/enum/role';
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
|
import { LockService } from '@app/core/services/lock/lock.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-recent-edited-dataset-activity',
|
selector: 'app-recent-edited-dataset-activity',
|
||||||
|
@ -55,7 +56,8 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen
|
||||||
public router: Router,
|
public router: Router,
|
||||||
private datasetWizardService: DatasetWizardService,
|
private datasetWizardService: DatasetWizardService,
|
||||||
private uiNotificationService: UiNotificationService,
|
private uiNotificationService: UiNotificationService,
|
||||||
private location: Location
|
private location: Location,
|
||||||
|
private lockService: LockService
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -154,7 +156,7 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen
|
||||||
data: {
|
data: {
|
||||||
formControl: formControl,
|
formControl: formControl,
|
||||||
datasetId: dataset.id,
|
datasetId: dataset.id,
|
||||||
datasetProfileId: dataset.profile,
|
datasetProfileId: dataset.profile.id,
|
||||||
datasetProfileExist: false,
|
datasetProfileExist: false,
|
||||||
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
||||||
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
|
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
|
||||||
|
@ -165,13 +167,24 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen
|
||||||
.subscribe(result => {
|
.subscribe(result => {
|
||||||
if (result && result.datasetProfileExist) {
|
if (result && result.datasetProfileExist) {
|
||||||
const newDmpId = result.formControl.value.id;
|
const newDmpId = result.formControl.value.id;
|
||||||
let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId } ])
|
let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId } ]);
|
||||||
window.open(url.toString(), '_blank')
|
window.open(url.toString(), '_blank');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
openConfirm(id: string): void {
|
deleteClicked(id: string) {
|
||||||
|
this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed))
|
||||||
|
.subscribe(lockStatus => {
|
||||||
|
if (!lockStatus) {
|
||||||
|
this.openDeleteDialog(id);
|
||||||
|
} else {
|
||||||
|
this.openLockedByUserDialog();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
openDeleteDialog(id: string): void {
|
||||||
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
maxWidth: '300px',
|
maxWidth: '300px',
|
||||||
restoreFocus: false,
|
restoreFocus: false,
|
||||||
|
@ -194,6 +207,16 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
openLockedByUserDialog() {
|
||||||
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
|
maxWidth: '400px',
|
||||||
|
restoreFocus: false,
|
||||||
|
data: {
|
||||||
|
message: this.language.instant('DATASET-WIZARD.ACTIONS.LOCK')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
openShareDialog(dmpRowId: any, dmpRowName: any, activity: any) {
|
openShareDialog(dmpRowId: any, dmpRowName: any, activity: any) {
|
||||||
const dialogRef = this.dialog.open(DmpInvitationDialogComponent, {
|
const dialogRef = this.dialog.open(DmpInvitationDialogComponent, {
|
||||||
// height: '250px',
|
// height: '250px',
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngFor="let activity of dmpActivities">
|
<div *ngFor="let activity of dmpActivities">
|
||||||
<div class="dmp-card">
|
<div class="dmp-card">
|
||||||
<div [routerLink]="['../plans/overview/' + activity.id]" class="pointer">
|
<a [routerLink]="['../plans/overview/' + activity.id]" target="_blank" class="pointer">
|
||||||
<div class="d-flex flex-direction-row">
|
<div class="d-flex flex-direction-row">
|
||||||
<div class="col-auto dmp-label">{{ 'DMP-LISTING.DMP' | translate }}</div>
|
<div class="col-auto dmp-label">{{ 'DMP-LISTING.DMP' | translate }}</div>
|
||||||
<div class="col-auto ml-auto edited-date">{{ 'DMP-LISTING.EDITED' | translate }}: {{ activity.modifiedTime | date: "longDate" }}</div>
|
<div class="col-auto ml-auto edited-date">{{ 'DMP-LISTING.EDITED' | translate }}: {{ activity.modifiedTime | date: "longDate" }}</div>
|
||||||
|
@ -47,12 +47,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a class="d-flex justify-content-center pb-3 show-more" *ngIf="activity.datasets.length > 3" [routerLink]="['../plans/overview/' + activity.id]"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a>
|
<a class="d-flex justify-content-center pb-3 show-more" *ngIf="activity.datasets.length > 3" [routerLink]="['../plans/overview/' + activity.id]"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a>
|
||||||
</div>
|
</a>
|
||||||
<div class="dmp-card-actions">
|
<div class="dmp-card-actions">
|
||||||
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" *ngIf="isDraftDmp(activity) && isUserOwner" (click)="addDataset(activity.id)"><span class="material-icons icon-align">add</span>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isDraftDmp(activity)" [routerLink]="['/datasets/new/' + activity.id]" target="_blank"><span class="material-icons icon-align">add</span>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" *ngIf="isUserOwner" (click)="openShareDialog(activity.id, activity.label)"><span class="material-icons icon-align pr-2">group_add</span>{{'DMP-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isUserOwner(activity)" (click)="openShareDialog(activity.id, activity.label)"><span class="material-icons icon-align pr-2">group_add</span>{{'DMP-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" *ngIf="isAuthenticated()" (click)="cloneClicked(activity)"><span class="material-icons icon-align pr-2">filter_none</span>{{'DMP-LISTING.ACTIONS.CLONE' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isAuthenticated()" [routerLink]="['/plans/clone/' + activity.id]" target="_blank"><span class="material-icons icon-align pr-2">filter_none</span>{{'DMP-LISTING.ACTIONS.CLONE' | translate}}</a>
|
||||||
<a class="col-auto pointer" [matMenuTriggerFor]="actionsMenu"><span class="material-icons icon-align pl-2">more_horiz</span></a>
|
<a class="col-auto pointer" [matMenuTriggerFor]="actionsMenu"><span class="material-icons icon-align pl-2">more_horiz</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
<button mat-menu-item (click)="viewVersions(activity.groupId, activity.label, activity)">
|
<button mat-menu-item (click)="viewVersions(activity.groupId, activity.label, activity)">
|
||||||
<mat-icon>library_books</mat-icon>{{'DMP-LISTING.ACTIONS.VIEW-VERSION' | translate}}
|
<mat-icon>library_books</mat-icon>{{'DMP-LISTING.ACTIONS.VIEW-VERSION' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item *ngIf="isUserOwner(activity)" (click)="deleteClicked()" class="menu-item">
|
<button mat-menu-item *ngIf="isUserOwner(activity)" (click)="deleteClicked(activity.id)" class="menu-item">
|
||||||
<mat-icon>delete</mat-icon>{{ 'DMP-LISTING.ACTIONS.DELETE' | translate }}
|
<mat-icon>delete</mat-icon>{{ 'DMP-LISTING.ACTIONS.DELETE' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
|
|
|
@ -23,6 +23,7 @@ import { Role } from '@app/core/common/enum/role';
|
||||||
import { FormBuilder, FormControl } from '@angular/forms';
|
import { FormBuilder, FormControl } from '@angular/forms';
|
||||||
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
|
import { LockService } from '@app/core/services/lock/lock.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-recent-edited-dmp-activity',
|
selector: 'app-recent-edited-dmp-activity',
|
||||||
|
@ -57,7 +58,8 @@ export class RecentEditedDmpActivityComponent extends BaseComponent implements O
|
||||||
private language: TranslateService,
|
private language: TranslateService,
|
||||||
private dialog: MatDialog,
|
private dialog: MatDialog,
|
||||||
private uiNotificationService: UiNotificationService,
|
private uiNotificationService: UiNotificationService,
|
||||||
private location: Location
|
private location: Location,
|
||||||
|
private lockService: LockService
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -129,7 +131,18 @@ export class RecentEditedDmpActivityComponent extends BaseComponent implements O
|
||||||
window.open(url.toString(), '_blank');
|
window.open(url.toString(), '_blank');
|
||||||
}
|
}
|
||||||
|
|
||||||
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, {
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
maxWidth: '300px',
|
maxWidth: '300px',
|
||||||
restoreFocus: false,
|
restoreFocus: false,
|
||||||
|
@ -142,7 +155,7 @@ export class RecentEditedDmpActivityComponent extends BaseComponent implements O
|
||||||
});
|
});
|
||||||
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
|
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
|
||||||
if (result) {
|
if (result) {
|
||||||
this.dmpService.delete(dmp.id)
|
this.dmpService.delete(id)
|
||||||
.pipe(takeUntil(this._destroyed))
|
.pipe(takeUntil(this._destroyed))
|
||||||
.subscribe(
|
.subscribe(
|
||||||
complete => this.onDeleteCallbackSuccess(),
|
complete => this.onDeleteCallbackSuccess(),
|
||||||
|
@ -152,6 +165,16 @@ export class RecentEditedDmpActivityComponent extends BaseComponent implements O
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
openLockedByUserDialog() {
|
||||||
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
|
maxWidth: '400px',
|
||||||
|
restoreFocus: false,
|
||||||
|
data: {
|
||||||
|
message: this.language.instant('DMP-EDITOR.ACTIONS.LOCK')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
openShareDialog(rowId: any, rowName: any) {
|
openShareDialog(rowId: any, rowName: any) {
|
||||||
const dialogRef = this.dialog.open(DmpInvitationDialogComponent, {
|
const dialogRef = this.dialog.open(DmpInvitationDialogComponent, {
|
||||||
// height: '250px',
|
// height: '250px',
|
||||||
|
@ -303,19 +326,20 @@ export class RecentEditedDmpActivityComponent extends BaseComponent implements O
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
addDataset(activityId: String) {
|
|
||||||
this.router.navigate(['/datasets/new/' + activityId]);
|
|
||||||
}
|
|
||||||
|
|
||||||
newVersion(id: String, label: String) {
|
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) {
|
viewVersions(rowId: String, rowLabel: String, activity: DmpListingModel) {
|
||||||
if (activity.public && !this.isUserOwner) {
|
if (activity.public && !this.isUserOwner(activity)) {
|
||||||
this.router.navigate(['/explore-plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } });
|
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 {
|
} 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 } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<div class="dataset-card">
|
<div class="dataset-card">
|
||||||
<a [routerLink]="['../datasets/overview/' + dataset.id]" class="pointer">
|
<a [routerLink]="isPublic ? ['/datasets/publicOverview/' + dataset.id] : ['/datasets/overview/' + dataset.id]" target="_blank" class="pointer">
|
||||||
<div class="d-flex flex-direction-row">
|
<div class="d-flex flex-direction-row">
|
||||||
<div class="col-auto dataset-label">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}</div>
|
<div class="col-auto dataset-label">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}</div>
|
||||||
<div class="col-auto ml-auto edited-date">{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{dataset.modified | date:"longDate"}}</div>
|
<div class="col-auto ml-auto edited-date">{{'DATASET-LISTING.STATES.EDITED' | translate}}: {{dataset.modified | date:"longDate"}}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto dataset-title">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}: {{dataset.label}}</div>
|
<div class="col-auto dataset-title">{{'DATASET-LISTING.DATASET-DESCRIPTION' | translate}}: {{dataset.label}}</div>
|
||||||
<div class="dataset-subtitle">
|
<div class="dataset-subtitle">
|
||||||
<span class="col-auto">{{ roleDisplay(dataset.users) }}</span>
|
<span *ngIf="isUserDatasetRelated()" class="col-auto">{{ roleDisplay(dataset.users) }}</span>
|
||||||
<span>.</span>
|
<span *ngIf="isUserDatasetRelated()">.</span>
|
||||||
<span class="col-auto" *ngIf="dataset.status === 1 && dataset.public === true"><span class="material-icons icon-align">public</span>{{'DATASET-LISTING.STATES.PUBLIC' | translate}}</span>
|
<span class="col-auto" *ngIf="dataset.status === 1 && dataset.public === true"><span class="material-icons icon-align">public</span>{{'DATASET-LISTING.STATES.PUBLIC' | translate}}</span>
|
||||||
<span *ngIf="dataset.status === 1 && dataset.public === false" class="col-auto"><span class="material-icons icon-align">done</span>{{ enumUtils.toDmpStatusString(dataset.status) }}</span>
|
<span *ngIf="dataset.status === 1 && dataset.public === false" class="col-auto"><span class="material-icons icon-align">done</span>{{ enumUtils.toDmpStatusString(dataset.status) }}</span>
|
||||||
<span *ngIf="dataset.status === 0" class=" col-auto draft"><span class="material-icons icon-align">create</span>{{ enumUtils.toDmpStatusString(dataset.status) }}</span>
|
<span *ngIf="dataset.status === 0" class=" col-auto draft"><span class="material-icons icon-align">create</span>{{ enumUtils.toDmpStatusString(dataset.status) }}</span>
|
||||||
|
@ -15,11 +15,11 @@
|
||||||
<span class="col">{{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{dataset.grant}}</span>
|
<span class="col">{{'DATASET-LISTING.COLUMNS.GRANT' | translate}}: {{dataset.grant}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-direction-row pt-3 pb-3">
|
<div class="d-flex flex-direction-row pt-3 pb-3">
|
||||||
<div class="col-auto dataset-subtitle">{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}}
|
<div class="col-auto dataset-subtitle pr-0">{{'DATASET-LISTING.TOOLTIP.PART-OF' | translate}}
|
||||||
<div class="col-auto dmp-label ml-4">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div>
|
<div class="col-auto dmp-label ml-3">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="col-auto dmp-label">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div> -->
|
<!-- <div class="col-auto dmp-label">{{'DATASET-LISTING.TOOLTIP.DMP' | translate}}</div> -->
|
||||||
<div class="col dmp-title">{{'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate}}: {{dataset.dmp}}</div>
|
<div class="col dmp-title">{{dataset.dmp}}</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<div class="dataset-card-actions">
|
<div class="dataset-card-actions">
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
<button *ngIf="isAuthenticated()" mat-menu-item (click)="openDmpSearchDialogue(dataset)" class="menu-item">
|
<button *ngIf="isAuthenticated()" mat-menu-item (click)="openDmpSearchDialogue(dataset)" class="menu-item">
|
||||||
<mat-icon>file_copy</mat-icon>{{'DATASET-WIZARD.ACTIONS.COPY-DATASET' | translate}}
|
<mat-icon>file_copy</mat-icon>{{'DATASET-WIZARD.ACTIONS.COPY-DATASET' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="isUserOwner" mat-menu-item (click)="openConfirm(dataset.id)" class="menu-item">
|
<button *ngIf="isUserDatasetRelated()" mat-menu-item (click)="deleteClicked(dataset.id)" class="menu-item">
|
||||||
<mat-icon>delete</mat-icon>{{ 'DATASET-WIZARD.ACTIONS.DELETE' | translate }}
|
<mat-icon>delete</mat-icon>{{ 'DATASET-WIZARD.ACTIONS.DELETE' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<!-- <button mat-menu-item *ngIf="needsUpdate(activity)" class="menu-item" (click)="openUpdateDatasetProfileDialogue(activity.id);">
|
<!-- <button mat-menu-item *ngIf="needsUpdate(activity)" class="menu-item" (click)="openUpdateDatasetProfileDialogue(activity.id);">
|
||||||
|
|
|
@ -35,7 +35,6 @@ export class DatasetListingItemComponent extends BaseComponent implements OnInit
|
||||||
|
|
||||||
isDraft: boolean;
|
isDraft: boolean;
|
||||||
isDeleted: boolean;
|
isDeleted: boolean;
|
||||||
lockStatus: Boolean;
|
|
||||||
isUserOwner: boolean;
|
isUserOwner: boolean;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
@ -56,7 +55,6 @@ export class DatasetListingItemComponent extends BaseComponent implements OnInit
|
||||||
if (this.dataset.status === DatasetStatus.Draft) {
|
if (this.dataset.status === DatasetStatus.Draft) {
|
||||||
this.isDraft = true;
|
this.isDraft = true;
|
||||||
this.isDeleted = false;
|
this.isDeleted = false;
|
||||||
this.checkLockStatus(this.dataset.id);
|
|
||||||
this.setIsUserOwner();
|
this.setIsUserOwner();
|
||||||
} else if (this.dataset.status === DatasetStatus.Deleted) {
|
} else if (this.dataset.status === DatasetStatus.Deleted) {
|
||||||
this.isDeleted = true;
|
this.isDeleted = true;
|
||||||
|
@ -64,16 +62,10 @@ export class DatasetListingItemComponent extends BaseComponent implements OnInit
|
||||||
else {
|
else {
|
||||||
this.isDraft = false;
|
this.isDraft = false;
|
||||||
this.isDeleted = false;
|
this.isDeleted = false;
|
||||||
this.checkLockStatus(this.dataset.id);
|
|
||||||
this.setIsUserOwner();
|
this.setIsUserOwner();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checkLockStatus(id: string) {
|
|
||||||
this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed))
|
|
||||||
.subscribe(lockStatus => this.lockStatus = lockStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
setIsUserOwner() {
|
setIsUserOwner() {
|
||||||
if (this.dataset) {
|
if (this.dataset) {
|
||||||
const principal: Principal = this.authentication.current();
|
const principal: Principal = this.authentication.current();
|
||||||
|
@ -165,7 +157,7 @@ export class DatasetListingItemComponent extends BaseComponent implements OnInit
|
||||||
data: {
|
data: {
|
||||||
formControl: formControl,
|
formControl: formControl,
|
||||||
datasetId: dataset.id,
|
datasetId: dataset.id,
|
||||||
datasetProfileId: dataset.profile,
|
datasetProfileId: dataset.profile.id,
|
||||||
datasetProfileExist: false,
|
datasetProfileExist: false,
|
||||||
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
confirmButton: this.language.instant('DATASET-WIZARD.DIALOGUE.COPY'),
|
||||||
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
|
cancelButton: this.language.instant('DATASET-WIZARD.DIALOGUE.CANCEL')
|
||||||
|
@ -175,13 +167,25 @@ export class DatasetListingItemComponent extends BaseComponent implements OnInit
|
||||||
dialogRef.afterClosed().pipe(takeUntil(this._destroyed))
|
dialogRef.afterClosed().pipe(takeUntil(this._destroyed))
|
||||||
.subscribe(result => {
|
.subscribe(result => {
|
||||||
if (result && result.datasetProfileExist) {
|
if (result && result.datasetProfileExist) {
|
||||||
const newDmpId = result.formControl.value.id
|
const newDmpId = result.formControl.value.id;
|
||||||
this.router.navigate(['/datasets/copy/' + result.datasetId], { queryParams: { newDmpId: newDmpId } });
|
let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId }]);
|
||||||
|
window.open(url.toString(), '_blank');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
openConfirm(id: string): void {
|
deleteClicked(id: string) {
|
||||||
|
this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed))
|
||||||
|
.subscribe(lockStatus => {
|
||||||
|
if (!lockStatus) {
|
||||||
|
this.openDeleteDialog(id);
|
||||||
|
} else {
|
||||||
|
this.openLockedByUserDialog();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
openDeleteDialog(id: string): void {
|
||||||
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
maxWidth: '300px',
|
maxWidth: '300px',
|
||||||
restoreFocus: false,
|
restoreFocus: false,
|
||||||
|
@ -204,6 +208,16 @@ export class DatasetListingItemComponent extends BaseComponent implements OnInit
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
openLockedByUserDialog() {
|
||||||
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
|
maxWidth: '400px',
|
||||||
|
restoreFocus: false,
|
||||||
|
data: {
|
||||||
|
message: this.language.instant('DATASET-WIZARD.ACTIONS.LOCK')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
reloadPage(): void {
|
reloadPage(): void {
|
||||||
const path = this.location.path();
|
const path = this.location.path();
|
||||||
this.router.navigateByUrl('/reload', { skipLocationChange: true }).then(() => {
|
this.router.navigateByUrl('/reload', { skipLocationChange: true }).then(() => {
|
||||||
|
@ -246,6 +260,19 @@ export class DatasetListingItemComponent extends BaseComponent implements OnInit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isUserDatasetRelated() {
|
||||||
|
const principal: Principal = this.authentication.current();
|
||||||
|
let isRelated: boolean = false;
|
||||||
|
if (this.dataset && principal) {
|
||||||
|
this.dataset.users.forEach(element => {
|
||||||
|
if (element.id === principal.id) {
|
||||||
|
isRelated = true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return isRelated;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// onCallbackError(error: any) {
|
// onCallbackError(error: any) {
|
||||||
|
|
|
@ -12,28 +12,31 @@
|
||||||
<p class="col dataset-label p-0 ml-3 mb-0">{{ dataset.label }}</p>
|
<p class="col dataset-label p-0 ml-3 mb-0">{{ dataset.label }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="row d-flex align-items-center mt-3 mb-4 label-txt">
|
<div class="row d-flex align-items-center mt-3 mb-4 label-txt">
|
||||||
<div *ngIf="isUserDatasetRelated()" class="d-flex mr-2">
|
<div *ngIf="isUserDatasetRelated()" class="d-flex">
|
||||||
<p class="ml-0 mb-0 label2-txt">
|
<p class="ml-0 mb-0 label2-txt">
|
||||||
{{ roleDisplayFromList(dataset.users) }}
|
{{ roleDisplayFromList(dataset.users) }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<span>.</span>
|
<span *ngIf="isUserDatasetRelated()" class="ml-2 mr-2">.</span>
|
||||||
<div class="d-flex ml-2 mr-2">
|
<!-- UNCOMMENT TO ADD PRIVATE ICON -->
|
||||||
|
<!-- <span *ngIf="isUserDatasetRelated() && (dataset.public || !dataset.public || lockStatus)" class="ml-2 mr-2">.</span> -->
|
||||||
<div *ngIf="dataset.public" class="d-flex flex-row">
|
<div *ngIf="dataset.public" class="d-flex flex-row">
|
||||||
<mat-icon class="status-icon">public</mat-icon>
|
<mat-icon class="status-icon">public</mat-icon>
|
||||||
{{'DMP-OVERVIEW.PUBLIC' | translate}}
|
{{'DMP-OVERVIEW.PUBLIC' | translate}}
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!dataset.public" class="d-flex flex-row">
|
<span *ngIf="dataset.public" class="ml-2 mr-2">.</span>
|
||||||
|
<!-- UNCOMMENT TO ADD PRIVATE ICON -->
|
||||||
|
<!-- <div *ngIf="!dataset.public" class="d-flex flex-row">
|
||||||
<mat-icon class="status-icon">public_off</mat-icon>
|
<mat-icon class="status-icon">public_off</mat-icon>
|
||||||
{{'DMP-OVERVIEW.PRIVATE' | translate}}
|
{{'DMP-OVERVIEW.PRIVATE' | translate}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<span *ngIf="!dataset.public" class="ml-2 mr-2">.</span> -->
|
||||||
<span>.</span>
|
<div *ngIf="lockStatus" class="d-flex flex-row">
|
||||||
<div *ngIf="lockStatus" class="d-flex flex-row ml-2 mr-2">
|
|
||||||
<mat-icon class="status-icon">lock_outline</mat-icon>
|
<mat-icon class="status-icon">lock_outline</mat-icon>
|
||||||
{{'DMP-OVERVIEW.LOCKED' | translate}}
|
{{'DMP-OVERVIEW.LOCKED' | translate}}
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex ml-2 mr-2">{{'GENERAL.STATUSES.EDIT' | translate}} :
|
<span *ngIf="lockStatus" class="ml-2 mr-2">.</span>
|
||||||
|
<div class="d-flex mr-2">{{'GENERAL.STATUSES.EDIT' | translate}} :
|
||||||
{{dataset.modified | date:"longDate"}}
|
{{dataset.modified | date:"longDate"}}
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex ml-2 mr-4">
|
<div class="d-flex ml-2 mr-4">
|
||||||
|
@ -49,12 +52,12 @@
|
||||||
matTooltipPosition="above">
|
matTooltipPosition="above">
|
||||||
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
|
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="isDraftDataset(dataset) && isUserOwner && !lockStatus"
|
<button *ngIf="isDraftDataset(dataset) && !lockStatus"
|
||||||
(click)="editClicked(dataset)" mat-mini-fab class="mr-3 actions-btn"
|
(click)="editClicked(dataset)" mat-mini-fab class="mr-3 actions-btn"
|
||||||
matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above">
|
matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above">
|
||||||
<mat-icon class="mat-mini-fab-icon">create</mat-icon>
|
<mat-icon class="mat-mini-fab-icon">create</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="isUserOwner && !lockStatus" (click)="deleteClicked()" mat-mini-fab
|
<button *ngIf="isUserDatasetRelated() && !lockStatus" (click)="deleteClicked()" mat-mini-fab
|
||||||
class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}"
|
class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}"
|
||||||
matTooltipPosition="above">
|
matTooltipPosition="above">
|
||||||
<mat-icon class="mat-mini-fab-icon">delete</mat-icon>
|
<mat-icon class="mat-mini-fab-icon">delete</mat-icon>
|
||||||
|
@ -65,7 +68,6 @@
|
||||||
<button class="dmp-btn" (click)="dmpClicked(dataset.dmp.id)">
|
<button class="dmp-btn" (click)="dmpClicked(dataset.dmp.id)">
|
||||||
<div class="dmp-btn-label">
|
<div class="dmp-btn-label">
|
||||||
{{ this.dataset.dmp.label }}
|
{{ this.dataset.dmp.label }}
|
||||||
<!-- {{ 'DATASET-LISTING.TOOLTIP.DMP-FOR' | translate }}: {{ dataset.datasetTemplate.label }} -->
|
|
||||||
</div>
|
</div>
|
||||||
<mat-icon>launch</mat-icon>
|
<mat-icon>launch</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
@ -92,7 +94,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 col-lg-4 p-0">
|
<div class="col-md-4 col-lg-4 p-0">
|
||||||
<div class="frame mb-3 pt-4 pl-3 pr-5 pb-1">
|
<div class="frame mb-3 pt-4 pl-3 pr-5 pb-1">
|
||||||
<div *ngIf="!dataset.status && isDraftDataset(dataset) && isUserOwner && !lockStatus">
|
<div *ngIf="!dataset.status && isDraftDataset(dataset) && !lockStatus">
|
||||||
<div class="row ml-0 mr-0 pl-4 d-flex align-items-center" (click)="finalize(dataset)">
|
<div class="row ml-0 mr-0 pl-4 d-flex align-items-center" (click)="finalize(dataset)">
|
||||||
<button mat-mini-fab class="finalize-btn">
|
<button mat-mini-fab class="finalize-btn">
|
||||||
<mat-icon class="mat-mini-fab-icon check-icon">check</mat-icon>
|
<mat-icon class="mat-mini-fab-icon check-icon">check</mat-icon>
|
||||||
|
@ -103,7 +105,7 @@
|
||||||
<hr class="hr-line">
|
<hr class="hr-line">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="hasReversableStatus(dataset) && !lockStatus" class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center" (click)="reverse(dataset)">
|
<div *ngIf="hasReversableStatus(dataset)" class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center" (click)="reverse(dataset)">
|
||||||
<button mat-mini-fab class="frame-btn">
|
<button mat-mini-fab class="frame-btn">
|
||||||
<mat-icon class="mat-mini-fab-icon">unarchive</mat-icon>
|
<mat-icon class="mat-mini-fab-icon">unarchive</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core';
|
||||||
import { BaseComponent } from '@common/base/base.component';
|
import { BaseComponent } from '@common/base/base.component';
|
||||||
import { DatasetOverviewModel } from '@app/core/model/dataset/dataset-overview';
|
import { DatasetOverviewModel } from '@app/core/model/dataset/dataset-overview';
|
||||||
import { BreadcrumbItem } from '@app/ui/misc/breadcrumb/definition/breadcrumb-item';
|
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 { ActivatedRoute, Router, Params } from '@angular/router';
|
||||||
import { DatasetService } from '@app/core/services/dataset/dataset.service';
|
import { DatasetService } from '@app/core/services/dataset/dataset.service';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
@ -167,9 +167,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
reloadPage(): void {
|
reloadPage(): void {
|
||||||
const path = this.location.path();
|
const path = this.location.path();
|
||||||
this.router.navigateByUrl('/reload', { skipLocationChange: true }).then(() => {
|
this.router.navigateByUrl('/reload', { skipLocationChange: true }).then(() => this.router.navigate([path]));
|
||||||
this.router.navigate([path]);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getDmpResearchers() {
|
getDmpResearchers() {
|
||||||
|
@ -410,7 +408,7 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
|
||||||
.subscribe(result => {
|
.subscribe(result => {
|
||||||
if (result && result.datasetProfileExist) {
|
if (result && result.datasetProfileExist) {
|
||||||
const newDmpId = result.formControl.value.id
|
const newDmpId = result.formControl.value.id
|
||||||
let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId } ])
|
let url = this.router.createUrlTree(['/datasets/copy/', result.datasetId, { newDmpId: newDmpId }])
|
||||||
window.open(url.toString(), '_blank')
|
window.open(url.toString(), '_blank')
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<a class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto pt-3 material-icons clear-icon">clear</span></a>
|
<a class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto pt-3 material-icons clear-icon">clear</span></a>
|
||||||
<div class="card-content info-text mb-0 pt-0">
|
<div class="card-content info-text mb-0 pt-0">
|
||||||
<p>{{'DMP-LISTING.TEXT-INFO' | translate}}</p>
|
<p>{{'DMP-LISTING.TEXT-INFO' | translate}}</p>
|
||||||
<p class="mt-4 pt-2">{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} <u>{{'DMP-LISTING.LINK-ZENODO' | translate}}</u> {{'DMP-LISTING.GET-IDEA' | translate}}</p>
|
<p class="mt-4 pt-2">{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} <a class="zenodo-link" href="https://zenodo.org/communities/liber-dmp-cat/?page=1&size=20" target="_blank">{{'DMP-LISTING.LINK-ZENODO' | translate}}</a> {{'DMP-LISTING.GET-IDEA' | translate}}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-btn" [style.right]="dialog.openDialogs.length > 0 ? '446px' : '0px'" [style.width]="scrollbar ? '57px' : '37px'" (click)="openFiltersDialog()">
|
<div class="filter-btn" [style.right]="dialog.openDialogs.length > 0 ? '446px' : '0px'" [style.width]="scrollbar ? '57px' : '37px'" (click)="openFiltersDialog()">
|
||||||
|
|
|
@ -218,7 +218,12 @@
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pointer:hover {
|
.zenodo-link {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pointer:hover, .zenodo-link:hover {
|
||||||
color: #00b29f;
|
color: #00b29f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<div class="dmp-card">
|
<div class="dmp-card">
|
||||||
<a [routerLink]="isPublic ? ['/explore-plans/publicOverview/' + dmp.id] : ['/plans/overview/' + dmp.id]" class="pointer">
|
<a [routerLink]="isPublic ? ['/explore-plans/publicOverview/' + dmp.id] : ['/plans/overview/' + dmp.id]" target="_blank" class="pointer">
|
||||||
<div class="d-flex flex-direction-row">
|
<div class="d-flex flex-direction-row">
|
||||||
<div class="col-auto dmp-label">{{ 'DMP-LISTING.DMP' | translate }}</div>
|
<div class="col-auto dmp-label">{{ 'DMP-LISTING.DMP' | translate }}</div>
|
||||||
<div class="col-auto ml-auto edited-date">{{ 'DMP-LISTING.EDITED' | translate }}: {{ dmp.modifiedTime | date: "longDate" }}</div>
|
<div class="col-auto ml-auto edited-date">{{ 'DMP-LISTING.EDITED' | translate }}: {{ dmp.modifiedTime | date: "longDate" }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto" [ngClass]="{'dmp-title': !isDraft, 'dmp-title-draft': isDraft}">{{dmp.label}}</div>
|
<div class="col-auto" [ngClass]="{'dmp-title': !isDraft, 'dmp-title-draft': isDraft}">{{dmp.label}}</div>
|
||||||
<div class="dmp-subtitle">
|
<div class="dmp-subtitle">
|
||||||
<span class="col-auto">{{ roleDisplay(dmp.users) }}</span>
|
<span *ngIf="isUserDMPRelated()" class="col-auto">{{ roleDisplay(dmp.users) }}</span>
|
||||||
<span>.</span>
|
<span *ngIf="isUserDMPRelated()">.</span>
|
||||||
<span class="col-auto" *ngIf="dmp.status === 1 && dmp.public === true"><span class="material-icons icon-align">public</span>{{'TYPES.DMP-VISIBILITY.PUBLIC' | translate}}</span>
|
<span class="col-auto" *ngIf="dmp.status === 1 && dmp.public === true"><span class="material-icons icon-align">public</span>{{'TYPES.DMP-VISIBILITY.PUBLIC' | translate}}</span>
|
||||||
<span *ngIf="dmp.status === 1 && dmp.public === false" class="col-auto"><span class="material-icons icon-align">done</span>{{ enumUtils.toDmpStatusString(dmp.status) }}</span>
|
<span *ngIf="dmp.status === 1 && dmp.public === false" class="col-auto"><span class="material-icons icon-align">done</span>{{ enumUtils.toDmpStatusString(dmp.status) }}</span>
|
||||||
<span *ngIf="dmp.status === 0" class=" col-auto draft"><span class="material-icons icon-align">create</span>{{ enumUtils.toDmpStatusString(dmp.status) }}</span>
|
<span *ngIf="dmp.status === 0" class=" col-auto draft"><span class="material-icons icon-align">create</span>{{ enumUtils.toDmpStatusString(dmp.status) }}</span>
|
||||||
|
@ -28,9 +28,9 @@
|
||||||
</a>
|
</a>
|
||||||
<div class="dmp-card-actions">
|
<div class="dmp-card-actions">
|
||||||
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" (click)="addDataset(dmp.id)"><span class="material-icons icon-align">add</span>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isDraftDmp(dmp)" [routerLink]="['/datasets/new/' + dmp.id]" target="_blank"><span class="material-icons icon-align">add</span>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" (click)="openShareDialog(dmp.id, dmp.label)"><span class="material-icons icon-align pr-2">group_add</span>{{'DMP-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isUserOwner(dmp)" (click)="openShareDialog(dmp.id, dmp.label)"><span class="material-icons icon-align pr-2">group_add</span>{{'DMP-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a>
|
||||||
<a class="col-auto border-right pointer" (click)="cloneClicked(dmp)"><span class="material-icons icon-align pr-2">filter_none</span>{{'DMP-LISTING.ACTIONS.CLONE' | translate}}</a>
|
<a class="col-auto border-right pointer" *ngIf="isAuthenticated()" [routerLink]="['/plans/clone/' + dmp.id]" target="_blank"><span class="material-icons icon-align pr-2">filter_none</span>{{'DMP-LISTING.ACTIONS.CLONE' | translate}}</a>
|
||||||
<a class="col-auto pointer" [matMenuTriggerFor]="actionsMenu"><span class="material-icons icon-align pl-2">more_horiz</span></a>
|
<a class="col-auto pointer" [matMenuTriggerFor]="actionsMenu"><span class="material-icons icon-align pl-2">more_horiz</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -56,11 +56,10 @@
|
||||||
<button *ngIf="isUserOwner(dmp)" mat-menu-item (click)="newVersion(dmp.id, dmp.label)">
|
<button *ngIf="isUserOwner(dmp)" mat-menu-item (click)="newVersion(dmp.id, dmp.label)">
|
||||||
<mat-icon>queue</mat-icon>{{'DMP-LISTING.ACTIONS.NEW-VERSION' | translate}}
|
<mat-icon>queue</mat-icon>{{'DMP-LISTING.ACTIONS.NEW-VERSION' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item (click)="viewVersions(dmp.groupId, dmp.label)">
|
<button mat-menu-item (click)="viewVersions(dmp.groupId, dmp.label, dmp)">
|
||||||
<mat-icon>library_books</mat-icon>{{'DMP-LISTING.ACTIONS.VIEW-VERSION' | translate}}
|
<mat-icon>library_books</mat-icon>{{'DMP-LISTING.ACTIONS.VIEW-VERSION' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<!-- <button mat-menu-item *ngIf="isDraftDmp(dmp) && isUserOwner(dmp)" (click)="deleteClicked()" class="menu-item"> -->
|
<button mat-menu-item *ngIf="isUserOwner(dmp)" (click)="deleteClicked(dmp.id)" class="menu-item">
|
||||||
<button mat-menu-item *ngIf="isUserOwner(dmp) && !lockStatus" (click)="deleteClicked(dmp)" class="menu-item">
|
|
||||||
<mat-icon>delete</mat-icon>{{ 'DMP-LISTING.ACTIONS.DELETE' | translate }}
|
<mat-icon>delete</mat-icon>{{ 'DMP-LISTING.ACTIONS.DELETE' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
|
|
|
@ -34,7 +34,6 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit {
|
||||||
isDraft: boolean;
|
isDraft: boolean;
|
||||||
isFinalized: boolean;
|
isFinalized: boolean;
|
||||||
isPublished: boolean;
|
isPublished: boolean;
|
||||||
lockStatus: Boolean;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private router: Router,
|
private router: Router,
|
||||||
|
@ -54,20 +53,17 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit {
|
||||||
this.isDraft = true;
|
this.isDraft = true;
|
||||||
this.isFinalized = false;
|
this.isFinalized = false;
|
||||||
this.isPublished = false;
|
this.isPublished = false;
|
||||||
this.checkLockStatus(this.dmp.id);
|
|
||||||
}
|
}
|
||||||
else if (this.dmp.status == DmpStatus.Finalized) {
|
else if (this.dmp.status == DmpStatus.Finalized) {
|
||||||
this.isDraft = false;
|
this.isDraft = false;
|
||||||
this.isFinalized = true;
|
this.isFinalized = true;
|
||||||
this.isPublished = false;
|
this.isPublished = false;
|
||||||
this.checkLockStatus(this.dmp.id);
|
|
||||||
if (this.dmp.public == true) { this.isPublished = true }
|
if (this.dmp.public == true) { this.isPublished = true }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checkLockStatus(id: string) {
|
public isAuthenticated(): boolean {
|
||||||
this.lockService.checkLockStatus(id).pipe(takeUntil(this._destroyed))
|
return !(!this.authentication.current());
|
||||||
.subscribe(lockStatus => this.lockStatus = lockStatus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
openShareDialog(rowId: any, rowName: any) {
|
openShareDialog(rowId: any, rowName: any) {
|
||||||
|
@ -86,16 +82,20 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit {
|
||||||
this.router.navigate(['/plans/edit/' + dmpId]);
|
this.router.navigate(['/plans/edit/' + dmpId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
addDataset(rowId: String) {
|
|
||||||
this.router.navigate(['/datasets/new/' + rowId]);
|
|
||||||
}
|
|
||||||
|
|
||||||
showDatasets(rowId: String, rowLabel: String) {
|
showDatasets(rowId: String, rowLabel: String) {
|
||||||
this.router.navigate(['/datasets/dmp/' + rowId, { dmpLabel: rowLabel }]);
|
this.router.navigate(['/datasets/dmp/' + rowId, { dmpLabel: rowLabel }]);
|
||||||
}
|
}
|
||||||
|
|
||||||
viewVersions(rowId: String, rowLabel: String) {
|
viewVersions(rowId: String, rowLabel: String, dmp: DmpListingModel) {
|
||||||
this.router.navigate(['/plans/versions/' + rowId], { queryParams: { groupLabel: rowLabel } });
|
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() {
|
// 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) {
|
cloneClicked(dmp: DmpListingModel) {
|
||||||
this.router.navigate(['/plans/clone/' + dmp.id]);
|
this.router.navigate(['/plans/clone/' + dmp.id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
newVersion(id: String, label: String) {
|
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) {
|
downloadXml(id: string) {
|
||||||
|
@ -200,7 +214,18 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit {
|
||||||
return filename;
|
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, {
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||||
maxWidth: '300px',
|
maxWidth: '300px',
|
||||||
restoreFocus: false,
|
restoreFocus: false,
|
||||||
|
@ -213,7 +238,7 @@ export class DmpListingItemComponent extends BaseComponent implements OnInit {
|
||||||
});
|
});
|
||||||
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
|
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
|
||||||
if (result) {
|
if (result) {
|
||||||
this.dmpService.delete(dmp.id)
|
this.dmpService.delete(id)
|
||||||
.pipe(takeUntil(this._destroyed))
|
.pipe(takeUntil(this._destroyed))
|
||||||
.subscribe(
|
.subscribe(
|
||||||
complete => this.onDeleteCallbackSuccess(),
|
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) {
|
isDraftDmp(activity: DmpListingModel) {
|
||||||
return activity.status == DmpStatus.Draft;
|
return activity.status == DmpStatus.Draft;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,28 +13,28 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="row d-flex align-items-center mt-3 mb-4 label-txt">
|
<div class="row d-flex align-items-center mt-3 mb-4 label-txt">
|
||||||
<div *ngIf="isUserDMPRelated()" class="d-flex">
|
<div *ngIf="isUserDMPRelated()" class="d-flex">
|
||||||
<p class="ml-0 mr-2 mb-0 label2-txt">
|
<p class="ml-0 mb-0 label2-txt">
|
||||||
{{ roleDisplayFromList(dmp.users) }}</p>
|
{{ roleDisplayFromList(dmp.users) }}</p>
|
||||||
</div>
|
</div>
|
||||||
<span>.</span>
|
<span *ngIf="isUserDMPRelated() && (dmp.isPublic || lockStatus)" class="ml-2 mr-2">.</span>
|
||||||
<div class="d-flex ml-2 mr-2">
|
<!-- UNCOMMENT TO ADD PRIVATE ICON -->
|
||||||
|
<!-- <span *ngIf="isUserDMPRelated() && (dmp.isPublic || !dmp.isPublic || lockStatus)" class="ml-2 mr-2">.</span> -->
|
||||||
<div *ngIf="dmp.isPublic" class="d-flex flex-row">
|
<div *ngIf="dmp.isPublic" class="d-flex flex-row">
|
||||||
<mat-icon class="status-icon">public</mat-icon>
|
<mat-icon class="status-icon">public</mat-icon>
|
||||||
{{'DMP-OVERVIEW.PUBLIC' | translate}}
|
{{'DMP-OVERVIEW.PUBLIC' | translate}}
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!dmp.isPublic" class="d-flex flex-row">
|
<span *ngIf="dmp.isPublic && lockStatus" class="ml-2 mr-2">.</span>
|
||||||
|
<!-- UNCOMMENT TO ADD PRIVATE ICON -->
|
||||||
|
<!-- <div *ngIf="!dmp.isPublic" class="d-flex flex-row">
|
||||||
<mat-icon class="status-icon">public_off</mat-icon>
|
<mat-icon class="status-icon">public_off</mat-icon>
|
||||||
{{'DMP-OVERVIEW.PRIVATE' | translate}}
|
{{'DMP-OVERVIEW.PRIVATE' | translate}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<span *ngIf="!dmp.isPublic && lockStatus" class="ml-2 mr-2">.</span> -->
|
||||||
|
<div *ngIf="lockStatus" class="d-flex flex-row">
|
||||||
<div *ngIf="lockStatus" class="d-flex flex-row mr-2">
|
<mat-icon class="status-icon">lock_outline</mat-icon>
|
||||||
<span>.</span>
|
|
||||||
<mat-icon class="status-icon ml-2">lock_outline</mat-icon>
|
|
||||||
{{'DMP-OVERVIEW.LOCKED' | translate}}
|
{{'DMP-OVERVIEW.LOCKED' | translate}}
|
||||||
</div>
|
</div>
|
||||||
<span>.</span>
|
<mat-form-field appearance="outline" class="versions-select ml-3 mr-3">
|
||||||
<mat-form-field appearance="outline" class="versions-select ml-2 mr-4">
|
|
||||||
<mat-select placeholder="{{'DMP-LISTING.VERSION' | translate}} {{dmp.version}}"
|
<mat-select placeholder="{{'DMP-LISTING.VERSION' | translate}} {{dmp.version}}"
|
||||||
[(ngModel)]="version" (ngModelChange)="versionChanged(version.id)">
|
[(ngModel)]="version" (ngModelChange)="versionChanged(version.id)">
|
||||||
<mat-option *ngFor="let version of versions" [value]="version">
|
<mat-option *ngFor="let version of versions" [value]="version">
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
<div class="row header">{{'DMP-OVERVIEW.DATASETS-USED' | translate}}</div>
|
<div class="row header">{{'DMP-OVERVIEW.DATASETS-USED' | translate}}</div>
|
||||||
<div class="d-flex flex-column">
|
<div class="d-flex flex-column">
|
||||||
<div *ngFor="let dataset of dmp.datasets">
|
<div *ngFor="let dataset of dmp.datasets">
|
||||||
<div class="row" (click)="datasetClicked(dataset.id)">
|
<a class="row" [routerLink]="['/datasets/overview/' + dataset.id]" target="_blank">
|
||||||
<button mat-raised-button class="mb-2 mr-2 pl-0 pr-0">
|
<button mat-raised-button class="mb-2 mr-2 pl-0 pr-0">
|
||||||
<div matTooltip="{{ dataset.label }}"
|
<div matTooltip="{{ dataset.label }}"
|
||||||
class="col-auto dataset-btn">
|
class="col-auto dataset-btn">
|
||||||
|
@ -96,15 +96,14 @@
|
||||||
<mat-icon>launch</mat-icon>
|
<mat-icon>launch</mat-icon>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt-2 add-dataset-txt">
|
<div class="row mt-2 add-dataset-txt">
|
||||||
<button class="add-dataset-btn" *ngIf="isDraftDmp(dmp) && isUserOwner"
|
<a class="add-dataset-btn" *ngIf="isDraftDmp(dmp)" [routerLink]="['/datasets/new/' + dmp.id]" target="_blank">
|
||||||
(click)="addDataset(dmp.id)">
|
|
||||||
<mat-icon>add</mat-icon>
|
<mat-icon>add</mat-icon>
|
||||||
{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}
|
{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}
|
||||||
</button>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 col-lg-4 p-0">
|
<div class="col-md-4 col-lg-4 p-0">
|
||||||
|
@ -131,7 +130,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="frame mb-3 pt-4 pl-3 pr-5 pb-1">
|
<div class="frame mb-3 pt-4 pl-3 pr-5 pb-1">
|
||||||
<div *ngIf="!dmp.status && isDraftDmp(dmp) && isUserOwner && !lockStatus">
|
<div *ngIf="isDraftDmp(dmp) && isUserOwner && !lockStatus">
|
||||||
<div class="row ml-0 mr-0 pl-4 d-flex align-items-center" (click)="finalize(dmp)">
|
<div class="row ml-0 mr-0 pl-4 d-flex align-items-center" (click)="finalize(dmp)">
|
||||||
<button mat-mini-fab class="finalize-btn">
|
<button mat-mini-fab class="finalize-btn">
|
||||||
<mat-icon class="mat-mini-fab-icon">check</mat-icon>
|
<mat-icon class="mat-mini-fab-icon">check</mat-icon>
|
||||||
|
@ -149,7 +148,7 @@
|
||||||
</button>
|
</button>
|
||||||
<p class="mb-0 pl-2 frame-txt">{{ 'DMP-LISTING.ACTIONS.DEPOSIT' | translate }}</p>
|
<p class="mb-0 pl-2 frame-txt">{{ 'DMP-LISTING.ACTIONS.DEPOSIT' | translate }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="(isFinalizedDmp(dmp) && hasDoi(dmp) && !isPublishedDMP(dmp)) && isUserOwner"
|
<div *ngIf="isFinalizedDmp(dmp) && hasDoi(dmp) && !isPublishedDMP(dmp) && isUserOwner"
|
||||||
(click)="reverse(dmp)" class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center">
|
(click)="reverse(dmp)" class="row ml-0 mr-0 pl-4 pb-3 d-flex align-items-center">
|
||||||
<button mat-mini-fab class="frame-btn">
|
<button mat-mini-fab class="frame-btn">
|
||||||
<mat-icon class="mat-mini-fab-icon">unarchive</mat-icon>
|
<mat-icon class="mat-mini-fab-icon">unarchive</mat-icon>
|
||||||
|
|
|
@ -191,7 +191,7 @@
|
||||||
letter-spacing: 0.009em;
|
letter-spacing: 0.009em;
|
||||||
color: #7d7d7d;
|
color: #7d7d7d;
|
||||||
width: 12em;
|
width: 12em;
|
||||||
height: 1em;
|
height: 1.2em;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: none;
|
border: none;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
|
|
|
@ -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 { DmpOverviewComponent } from '@app/ui/dmp/overview/dmp-overview.component';
|
||||||
import { CommonFormsModule } from '@common/forms/common-forms.module';
|
import { CommonFormsModule } from '@common/forms/common-forms.module';
|
||||||
import { CommonUiModule } from '@common/ui/common-ui.module';
|
import { CommonUiModule } from '@common/ui/common-ui.module';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -16,7 +17,8 @@ import { CommonUiModule } from '@common/ui/common-ui.module';
|
||||||
ConfirmationDialogModule,
|
ConfirmationDialogModule,
|
||||||
ExportMethodDialogModule,
|
ExportMethodDialogModule,
|
||||||
FormattingModule,
|
FormattingModule,
|
||||||
AutoCompleteModule
|
AutoCompleteModule,
|
||||||
|
RouterModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
DmpOverviewComponent
|
DmpOverviewComponent
|
||||||
|
|
|
@ -66,25 +66,32 @@
|
||||||
<div class="row title-4">Translators</div>
|
<div class="row title-4">Translators</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card mt-3 flex-row">
|
<div class="card mt-3 flex-row">
|
||||||
<img class="col-4 flag" alt="Flag of Greece" src="../assets/img/flag-greece.png">
|
<img class="col-4 flag" alt="Flag of Greece" src="../assets/img/flag-of-greece.png">
|
||||||
<div class="col-8 card-body" class="flex-column align-items-center">
|
<div class="col-8 card-body pl-0" class="flex-column align-items-center">
|
||||||
<p class="card-text-1">Athena Research & Innovation Center</p>
|
<p class="card-text-1">Athena Research & Innovation Center</p>
|
||||||
<p class="card-text-2">Dimitra Aglamisi, Elli Papadopoulou</p>
|
<p class="card-text-2">Dimitra Aglamisi, Elli Papadopoulou</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card flex-row">
|
<div class="card flex-row">
|
||||||
<img class="col-4 card-img" alt="Flag of Spain" src="../assets/img/NoPath - Copy (7).png">
|
<img class="col-4 card-img" alt="Flag of Spain" src="../assets/img/flag-of-spain.png">
|
||||||
<div class="col-8 card-body" class="flex-column align-items-center">
|
<div class="col-8 card-body pl-0" class="flex-column align-items-center">
|
||||||
<p class="card-text-1">Consorcio Madroño</p>
|
<p class="card-text-1">Consorcio Madroño</p>
|
||||||
<p class="card-text-2">Lanko López, Juan Corrales Correyero, Fernando González Ballesteros</p>
|
<p class="card-text-2">Lanko López, Juan Corrales Correyero, Fernando González Ballesteros</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card flex-row">
|
<div class="card flex-row">
|
||||||
<img class="col-4 card-img" alt="Flag of Turkey" src="../assets/img/Image 82.png">
|
<img class="col-4 card-img" alt="Flag of Turkey" src="../assets/img/flag-of-turkey.png">
|
||||||
<div class="col-8 card-body" class="flex-column align-items-center">
|
<div class="col-8 card-body pl-0" class="flex-column align-items-center">
|
||||||
<p class="card-text-1">Turkish Higher Education Council Research Data and Open Data working group</p>
|
<p class="card-text-1">Turkish Higher Education Council Research Data and Open Data working group</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card flex-row">
|
||||||
|
<img class="col-4 flag" alt="Flag of Austria" src="../assets/img/flag-of-germany.png">
|
||||||
|
<div class="col-8 card-body pl-0" class="flex-column align-items-center">
|
||||||
|
<p class="card-text-1">UNIVERSITY OF VIENNA</p>
|
||||||
|
<p class="card-text-2">Gerda McNeill, Raman Ganguly, Mihaela Hubert</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<!-- Footer-->
|
<!-- Footer-->
|
||||||
|
|
After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |