diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java index b7f327caf..469702b6e 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java @@ -51,7 +51,7 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.POST, value = { "/dmps/getPaged" }, consumes = "application/json", produces="application/json") public @ResponseBody ResponseItem> getPaged(@Valid @RequestBody DataManagementPlanTableRequest dataManagementPlanTableRequest,Principal principal) { try { - DataTableData dataTable = new DataManagementPlanManager().getPaged(this.getApiContext().getDatabaseRepository().getDmpDao(), dataManagementPlanTableRequest); + DataTableData dataTable = new DataManagementPlanManager().getPaged(this.getApiContext(), dataManagementPlanTableRequest,principal); return new ResponseItem>().status(HttpStatus.OK).payload(dataTable); } catch (Exception ex) { diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java b/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java index 61a7c45db..165fcbc0b 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java @@ -1,5 +1,6 @@ package eu.eudat.controllers; +import eu.eudat.exceptions.UnauthorisedException; import eu.eudat.managers.InvitationsManager; import eu.eudat.models.helpers.responses.ResponseItem; import eu.eudat.models.invitation.Invitation; @@ -46,7 +47,11 @@ public class UserInvitationController extends BaseController{ try { UUID dmpId = InvitationsManager.assignUserAcceptedInvitation(this.getApiContext(),invitationID,principal); return new ResponseItem().status(HttpStatus.OK).payload(dmpId); - } catch (Exception e) { + }catch (UnauthorisedException e){ + e.printStackTrace(); + throw e; + } + catch (Exception e) { e.printStackTrace(); return new ResponseItem().message(e.getMessage()); } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDao.java index efc58140d..84fc13355 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDao.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDao.java @@ -25,5 +25,7 @@ public interface DMPDao { DMP find(UUID id); Long count(); + QueryableList getAuthenticated(QueryableList query,UserInfo principal); + } \ No newline at end of file diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDaoImpl.java index c9838e9e8..5dece2fa0 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDaoImpl.java @@ -16,6 +16,7 @@ import eu.eudat.entities.Project; import eu.eudat.entities.UserInfo; import eu.eudat.models.criteria.DataManagementPlanCriteria; import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest; +import eu.eudat.models.security.Principal; import eu.eudat.queryable.QueryableList; import org.hibernate.query.Query; @@ -43,6 +44,11 @@ public class DMPDaoImpl implements DMPDao { return query; } + public QueryableList getAuthenticated(QueryableList query,UserInfo principal) { + query.where((builder, root) -> builder.or(builder.equal(root.get("creator"),principal),builder.isMember(principal,root.get("users")))); + return query; + } + @Override public DMP createOrUpdate(DMP item) { return this.databaseService.createOrUpdate(item,DMP.class); diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java index 5c5f50a0e..f53714f49 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java @@ -25,9 +25,12 @@ import eu.eudat.utilities.builders.DomainModelConverter; public class DataManagementPlanManager { - public DataTableData getPaged(DMPDao dmpsRepository, DataManagementPlanTableRequest dataManagementPlanTableRequest) throws IllegalAccessException, InstantiationException{ - QueryableList items = dmpsRepository.getWithCriteria(dataManagementPlanTableRequest.getCriteria()); - QueryableList pagedItems = PaginationManager.applyPaging(items,dataManagementPlanTableRequest); + public DataTableData getPaged(ApiContext apiContext, DataManagementPlanTableRequest dataManagementPlanTableRequest,Principal principal) throws IllegalAccessException, InstantiationException{ + UserInfo userInfo = apiContext.getDatabaseRepository().getUserInfoDao().find(principal.getId()); + QueryableList items = apiContext.getDatabaseRepository().getDmpDao().getWithCriteria(dataManagementPlanTableRequest.getCriteria()); + QueryableList authItems = apiContext.getDatabaseRepository().getDmpDao().getAuthenticated(items,userInfo); + QueryableList pagedItems = PaginationManager.applyPaging(authItems,dataManagementPlanTableRequest); + if(dataManagementPlanTableRequest.getWithHint())pagedItems.withHint("fullyDetailed"); List datamanagementPlans = new DomainModelConverter().fromDataModel( pagedItems.toList(), DataManagementPlanListingModel.class); DataTableData dataTable = new DataTableData(); diff --git a/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java b/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java index d673c3510..2450269bc 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java @@ -2,6 +2,7 @@ package eu.eudat.managers; import eu.eudat.entities.DMP; import eu.eudat.entities.UserInfo; +import eu.eudat.exceptions.UnauthorisedException; import eu.eudat.models.invitation.Invitation; import eu.eudat.models.security.Principal; import eu.eudat.models.userinfo.UserInfoInvitationModel; @@ -36,10 +37,10 @@ public class InvitationsManager { return userModels; } - public static UUID assignUserAcceptedInvitation(ApiContext apiContext, UUID invitationID, Principal principal) throws Exception { + public static UUID assignUserAcceptedInvitation(ApiContext apiContext, UUID invitationID, Principal principal) throws UnauthorisedException { eu.eudat.entities.Invitation invitation = apiContext.getDatabaseRepository().getInvitationDao().find(invitationID); - if (invitation == null) throw new Exception("There is no Data Management Plan assigned to this Link"); - if (invitation.getAcceptedInvitation()) throw new Exception("This Url Has Expired"); + if (invitation == null) throw new UnauthorisedException("There is no Data Management Plan assigned to this Link"); + if (invitation.getAcceptedInvitation()) throw new UnauthorisedException("This Url Has Expired"); UserInfo invitedUser = apiContext.getDatabaseRepository().getUserInfoDao().find(principal.getId()); DMP datamanagementPlan = invitation.getDmp(); apiContext.getInvitationService().assignToDmp(apiContext.getDatabaseRepository().getDmpDao(), invitedUser, datamanagementPlan); diff --git a/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DatasetWizardModel.java b/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DatasetWizardModel.java index fbf5ee940..c3e8d9c4f 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DatasetWizardModel.java +++ b/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DatasetWizardModel.java @@ -157,9 +157,9 @@ public class DatasetWizardModel implements DataModel { this.description = entity.getDescription(); this.profile = new DatasetProfileListingModel(); this.profile.fromDataModel(entity.getProfile()); - this.registries = new DomainModelConverter().fromDataModel(entity.getRegistries().stream().collect(Collectors.toList()), Registry.class); - this.dataRepositories = new DomainModelConverter().fromDataModel(entity.getDataRepositories().stream().collect(Collectors.toList()), DataRepository.class); - this.services = new DomainModelConverter().fromDataModel(entity.getServices().stream().collect(Collectors.toList()), Service.class); + this.registries = new DomainModelConverter().fromDataModel(entity.getRegistries().stream().collect(Collectors.toList()), Registry.class); + this.dataRepositories = new DomainModelConverter().fromDataModel(entity.getDataRepositories().stream().collect(Collectors.toList()), DataRepository.class); + this.services = new DomainModelConverter().fromDataModel(entity.getServices().stream().collect(Collectors.toList()), Service.class); this.created = entity.getCreated(); } @@ -174,26 +174,26 @@ public class DatasetWizardModel implements DataModel { entity.setStatus(this.status); entity.setDmp(dmp.toDataModel()); entity.setDescription(this.description); - entity.setCreated(this.created!=null?this.created:new Date()); + entity.setCreated(this.created != null ? this.created : new Date()); entity.setModified(new Date()); entity.setProfile(profile.toDataModel()); ///TODO - if(!this.registries.isEmpty()){ + if (!this.registries.isEmpty()) { entity.setRegistries(new HashSet()); - for(Registry registry:this.registries){ + for (Registry registry : this.registries) { entity.getRegistries().add(registry.toDataModel()); } } - if(!this.dataRepositories.isEmpty()){ + if (!this.dataRepositories.isEmpty()) { entity.setDataRepositories(new HashSet()); - for(DataRepository dataRepository:this.dataRepositories){ + for (DataRepository dataRepository : this.dataRepositories) { entity.getDataRepositories().add(dataRepository.toDataModel()); } } - if(!this.services.isEmpty()){ + if (!this.services.isEmpty()) { entity.setServices(new HashSet()); - for(Service service:this.services){ + for (Service service : this.services) { entity.getServices().add(service.toDataModel()); } } diff --git a/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java index ef7a32c89..1e7beedb8 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java @@ -42,7 +42,7 @@ public class InvitationServiceImpl implements InvitationService { invitation.setInvitationEmail(userInfo.getEmail()); invitation.setUser(creator); invitation.setToken(UUID.randomUUID()); - invitation.setAcceptedInvitation(userInfo.getId() != null); + invitation.setAcceptedInvitation(false); invitationDao.createOrUpdate(invitation); sendInvitation(dmp, invitation, mailService); } @@ -64,7 +64,7 @@ public class InvitationServiceImpl implements InvitationService { private String createContent(UUID invitationID, DMP dmp, String templateContent) { String content = templateContent.replace("{dmpname}", dmp.getLabel()); - content = templateContent.replace("{invitationID}", invitationID.toString()); + content = content.replace("{invitationID}", invitationID.toString()); return content; } } diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index 3c653752f..977a7ff96 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -1,5 +1,4 @@ import { InvitationAcceptedComponent } from './invitation-accepted/invitation-accepted.component'; -import { InvitationComponent } from './invitation/invitation.component'; import { UnauthorizedComponent } from './unauthorized/unauthorized.component'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index 59e624db2..928946f83 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -119,6 +119,9 @@ import { AutocompleteComponent } from './shared/components/autocomplete/autocomp DatasetService, BaseHttpService ], + entryComponents: [ + InvitationComponent, + ], bootstrap: [AppComponent] }) export class AppModule { diff --git a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts index 30975918c..515bd1ce9 100644 --- a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts +++ b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts @@ -1,8 +1,7 @@ import { VisibilityRulesService } from '../../visibility-rules/visibility-rules.service'; import { FormGroup, Form, FormArray } from '@angular/forms'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; -import { CompositeField } from '@app/models/CompositeField'; -import { Section } from '@app/models/Section'; +import { CompositeField } from '../../models/CompositeField'; @Component({ @@ -32,6 +31,7 @@ export class DynamicFormSectionComponent implements OnInit { } isVisible(fieldSet:CompositeField):boolean{ + if(!this.visibilityRulesService.isElementVisible(null,fieldSet.id)) return false; for(var i=0; i