From 2d2d718a3a114dabee54e373b1b91dcbf444b74c Mon Sep 17 00:00:00 2001 From: annabakouli Date: Fri, 5 Jan 2018 09:47:52 +0200 Subject: [PATCH] no message --- .../controllers/DatasetWizardController.java | 2 +- .../java/eu/eudat/controllers/Services.java | 4 - .../controllers/UserInvitationController.java | 46 +++++++ .../main/java/eu/eudat/controllers/Users.java | 11 +- .../eu/eudat/dao/entities/InvitationDao.java | 23 ++++ .../eudat/dao/entities/InvitationDaoImpl.java | 41 +++++++ .../eu/eudat/dao/entities/UserInfoDao.java | 18 +-- .../eudat/dao/entities/UserInfoDaoImpl.java | 114 +++++------------- .../java/eu/eudat/entities/Invitation.java | 95 +++++++++++++++ .../main/java/eu/eudat/entities/UserInfo.java | 5 +- .../managers/DataManagementPlanManager.java | 2 +- .../eu/eudat/managers/InvitationsManager.java | 34 ++++++ .../eu/eudat/managers/ProjectManager.java | 2 +- .../components/datasetprofile/Field.java | 4 +- .../datafield/BooleanDecisionData.java | 5 +- .../models/criteria/InvitationCriteria.java | 9 ++ .../models/criteria/UserInfoCriteria.java | 18 +++ .../eudat/models/dmp/DataManagementPlan.java | 10 +- .../eudat/models/invitation/Invitation.java | 31 +++++ .../models/{dmp => userinfo}/UserInfo.java | 2 +- .../userinfo/UserInfoInvitationModel.java | 56 +++++++++ .../models/userinfo/UserInfoRequestItem.java | 10 ++ .../validators/GoogleTokenValidator.java | 9 +- .../java/eu/eudat/services/ApiContext.java | 1 + .../eu/eudat/services/ApiContextImpl.java | 11 ++ .../eudat/services/AuthenticationService.java | 2 +- .../eu/eudat/services/DatabaseRepository.java | 3 + .../services/DatabaseRepositoryImpl.java | 31 +++-- .../eu/eudat/services/InvitationService.java | 24 ++++ .../eudat/services/InvitationServiceImpl.java | 49 ++++++++ .../app/invitation/invitation.component.html | 0 .../app/invitation/invitation.component.ts | 8 ++ 32 files changed, 549 insertions(+), 131 deletions(-) create mode 100644 dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java create mode 100644 dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDao.java create mode 100644 dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDaoImpl.java create mode 100644 dmp-backend/src/main/java/eu/eudat/entities/Invitation.java create mode 100644 dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java create mode 100644 dmp-backend/src/main/java/eu/eudat/models/criteria/InvitationCriteria.java create mode 100644 dmp-backend/src/main/java/eu/eudat/models/criteria/UserInfoCriteria.java create mode 100644 dmp-backend/src/main/java/eu/eudat/models/invitation/Invitation.java rename dmp-backend/src/main/java/eu/eudat/models/{dmp => userinfo}/UserInfo.java (98%) create mode 100644 dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoInvitationModel.java create mode 100644 dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoRequestItem.java create mode 100644 dmp-backend/src/main/java/eu/eudat/services/InvitationService.java create mode 100644 dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java create mode 100644 dmp-frontend/src/app/invitation/invitation.component.html create mode 100644 dmp-frontend/src/app/invitation/invitation.component.ts diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java index bd9bde84f..49aa0d820 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java @@ -72,7 +72,7 @@ public class DatasetWizardController extends BaseController{ return new ResponseItem().status(HttpStatus.OK).payload(dataset); } catch (Exception ex) { ex.printStackTrace(); - return new ResponseItem().status(HttpStatus.OK).message(ex.getMessage()); + return new ResponseItem().status(HttpStatus.BAD_REQUEST).message(ex.getMessage()); } } diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Services.java b/dmp-backend/src/main/java/eu/eudat/controllers/Services.java index 3e43490e6..4126ea670 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Services.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Services.java @@ -139,9 +139,5 @@ public class Services extends BaseController{ } } - - - - } diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java b/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java new file mode 100644 index 000000000..f7742fcf9 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java @@ -0,0 +1,46 @@ +package eu.eudat.controllers; + +import eu.eudat.managers.InvitationsManager; +import eu.eudat.models.helpers.responses.ResponseItem; +import eu.eudat.models.invitation.Invitation; +import eu.eudat.models.userinfo.UserInfoInvitationModel; +import eu.eudat.models.userinfo.UserInfoRequestItem; +import eu.eudat.services.ApiContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Created by ikalyvas on 1/4/2018. + */ +@RequestMapping("invite/") +@RestController +@CrossOrigin +public class UserInvitationController extends BaseController{ + + @Autowired + public UserInvitationController(ApiContext apiContext) { + super(apiContext); + } + + @RequestMapping(method = RequestMethod.POST, value = { "/users" }, consumes = "application/json", produces="application/json") + public @ResponseBody ResponseItem users(@RequestBody Invitation invitation) { + try { + InvitationsManager.inviteUsers(this.getApiContext(),invitation); + return new ResponseItem().message("Users have beeen invited"); + } catch (Exception e) { + return new ResponseItem().message(e.getMessage()); + } + } + + @RequestMapping(method = RequestMethod.POST, value = { "/getUsers" }, consumes = "application/json", produces="application/json") + public @ResponseBody ResponseItem> getUsers(@RequestBody UserInfoRequestItem userInfoRequestItem) { + try { + List users = InvitationsManager.getUsers(this.getApiContext(),userInfoRequestItem); + return new ResponseItem>().payload(users); + } catch (Exception e) { + return new ResponseItem>().message(e.getMessage()); + } + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Users.java b/dmp-backend/src/main/java/eu/eudat/controllers/Users.java index 8f4cc4a65..6bdbd9fa8 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Users.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Users.java @@ -73,13 +73,10 @@ public class Users extends BaseController{ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } - UserInfo userInfo = this.getApiContext().getDatabaseRepository().getUserInfoDao().getUserInfo(userID); - - - if(userInfo==null) //this should normally never happer - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); - - + UserInfo userInfo = this.getApiContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString(userID)); + + if(userInfo==null) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); + try { return ResponseEntity.status(HttpStatus.OK).body(userInfo); diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDao.java new file mode 100644 index 000000000..e48497e5a --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDao.java @@ -0,0 +1,23 @@ +package eu.eudat.dao.entities; + +import eu.eudat.entities.Dataset; +import eu.eudat.entities.Invitation; +import eu.eudat.models.criteria.DatasetCriteria; +import eu.eudat.models.criteria.InvitationCriteria; +import eu.eudat.queryable.QueryableList; + +import java.util.UUID; + +/** + * Created by ikalyvas on 1/4/2018. + */ +public interface InvitationDao { + + QueryableList getWithCriteria(InvitationCriteria criteria); + + Invitation createOrUpdate(Invitation item); + + Invitation find(UUID id); + + Long count(); +} diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDaoImpl.java new file mode 100644 index 000000000..fe5605cf1 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDaoImpl.java @@ -0,0 +1,41 @@ +package eu.eudat.dao.entities; + +import eu.eudat.dao.databaselayer.service.DatabaseService; +import eu.eudat.entities.DMP; +import eu.eudat.entities.Invitation; +import eu.eudat.models.criteria.InvitationCriteria; +import eu.eudat.queryable.QueryableList; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +/** + * Created by ikalyvas on 1/4/2018. + */ +@Service("invitationDao") +public class InvitationDaoImpl implements InvitationDao{ + + @Autowired + DatabaseService databaseService; + + @Override + public QueryableList getWithCriteria(InvitationCriteria criteria) { + return null; + } + + @Override + public Invitation createOrUpdate(Invitation item) { + return this.databaseService.createOrUpdate(item,Invitation.class); + } + + @Override + public Invitation find(UUID id) { + return this.databaseService.getQueryable(Invitation.class).where((builder, root) -> builder.equal(root.get("id"),id)).toList().get(0); + } + + @Override + public Long count() { + return null; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/UserInfoDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/UserInfoDao.java index 28a9fb1f4..be5dcbabf 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/UserInfoDao.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/UserInfoDao.java @@ -5,19 +5,21 @@ import java.util.UUID; import eu.eudat.dao.Dao; import eu.eudat.entities.DMP; +import eu.eudat.entities.Project; import eu.eudat.entities.UserInfo; +import eu.eudat.models.criteria.ProjectCriteria; +import eu.eudat.models.criteria.UserInfoCriteria; +import eu.eudat.queryable.QueryableList; import org.springframework.stereotype.Service; -public interface UserInfoDao extends Dao { +public interface UserInfoDao { - public UserInfo getUserInfo(String userID); - - public UserInfo getByIdAndMail(String id, String email); + QueryableList getWithCriteria(UserInfoCriteria criteria); - public UserInfo getByMail(String email); + UserInfo createOrUpdate(UserInfo item); - public UserInfo getByUsername(String username); - - public List getDmpsOfUser(String userID); + UserInfo find(UUID id); + + Long count(); } \ No newline at end of file diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/UserInfoDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/UserInfoDaoImpl.java index 7a265be81..21765b6a0 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/UserInfoDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/UserInfoDaoImpl.java @@ -7,98 +7,44 @@ import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import eu.eudat.dao.JpaDao; +import eu.eudat.dao.databaselayer.service.DatabaseService; import eu.eudat.entities.DMP; +import eu.eudat.entities.Invitation; import eu.eudat.entities.UserInfo; +import eu.eudat.models.criteria.ProjectCriteria; +import eu.eudat.models.criteria.UserInfoCriteria; +import eu.eudat.queryable.QueryableList; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component("userInfoDao") -public class UserInfoDaoImpl extends JpaDao implements UserInfoDao { +public class UserInfoDaoImpl implements UserInfoDao { - public UserInfo loadDetails(UserInfo t) { - // TODO Auto-generated method stub - return null; - } - - - - @Override - public UserInfo getUserInfo(String userID) { - String queryString = "FROM UserInfo userInfo where userInfo.id = :userInfoID"; - TypedQuery typedQuery = entityManager.createQuery(queryString, UserInfo.class); - typedQuery.setParameter("userInfoID", UUID.fromString(userID)); - try { - return typedQuery.getSingleResult(); - } - catch(NoResultException ex) { - return null; - } - } - - - - @Override - public UserInfo getByIdAndMail(String id, String email) { - String queryString = "FROM UserInfo userInfo where userInfo.id = :userInfoID and userInfo.email = :userInfoEmail"; - TypedQuery typedQuery = entityManager.createQuery(queryString, UserInfo.class); - typedQuery.setParameter("userInfoID", UUID.fromString(id)); - typedQuery.setParameter("userInfoEmail", email); - try { - return typedQuery.getSingleResult(); - } - catch(NoResultException ex) { - return null; - } - } + @Autowired + private DatabaseService databaseService; + @Override + public QueryableList getWithCriteria(UserInfoCriteria criteria) { + QueryableList users = this.databaseService.getQueryable(UserInfo.class); + if (criteria.getLike() != null) + users.where((builder, root) -> builder.or(builder.like(root.get("name"), "%" + criteria.getLike() + "%"), builder.like(root.get("email"), "%" + criteria.getLike() + "%"))); + if(criteria.getEmail()!=null) + users.where((builder, root) -> builder.equal(root.get("email"),criteria.getEmail())); + return users; + } - @Override - public UserInfo getByMail(String email) { - String queryString = "FROM UserInfo userInfo where userInfo.email = :email"; - TypedQuery typedQuery = entityManager.createQuery(queryString, UserInfo.class); - typedQuery.setParameter("email", email); - try { - return typedQuery.getSingleResult(); - } - catch(Exception ex) { //no need to distinguish between eu.eudat.exceptions for the moment - return null; - } - } + @Override + public UserInfo createOrUpdate(UserInfo item) { + return this.databaseService.createOrUpdate(item,UserInfo.class); + } + @Override + public UserInfo find(UUID id) { + return this.databaseService.getQueryable(UserInfo.class).where((builder, root) -> builder.equal(root.get("id"),id)).toList().get(0); + } - - @Override - public UserInfo getByUsername(String username) { - - String queryString = "select ui from UserInfo ui join UserAuth ui.authentication ua where ua.username=:username"; - TypedQuery typedQuery = entityManager.createQuery(queryString, UserInfo.class); - typedQuery.setParameter("username", username); - try { - return typedQuery.getSingleResult(); - } - catch(Exception ex) { //no need to distinguish between eu.eudat.exceptions for the moment - return null; - } - } - - @Override - public List getDmpsOfUser(String userID) { - - String queryString = "select dmp from DMP dmp join dmp.users user where user.id=:userid and dmp.status >= 0"; - TypedQuery typedQuery = entityManager.createQuery(queryString, DMP.class); - typedQuery.setParameter("userid", UUID.fromString(userID)); - try { - return typedQuery.getResultList(); - } - catch(Exception ex) { //no need to distinguish between eu.eudat.exceptions for the moment - ex.printStackTrace(); - return null; - } - - } - - - - - - + @Override + public Long count() { + return null; + } } \ No newline at end of file diff --git a/dmp-backend/src/main/java/eu/eudat/entities/Invitation.java b/dmp-backend/src/main/java/eu/eudat/entities/Invitation.java new file mode 100644 index 000000000..0aff7df91 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/entities/Invitation.java @@ -0,0 +1,95 @@ +package eu.eudat.entities; + +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.util.Date; +import java.util.UUID; + +/** + * Created by ikalyvas on 12/15/2017. + */ +@Entity +@Table(name="\"Invitation\"") +public class Invitation implements DataEntity{ + + @Id + @Column(name = "\"Id\"", updatable = false, nullable = false) + private UUID id; + + @Column(name = "\"InvitationEmail\"", nullable = false) + private String invitationEmail; + + @OneToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "\"CreationUser\"", nullable = false) + private UserInfo user; + + @OneToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "\"Dmp\"", nullable = false) + private DMP dmp; + + @Column(name = "\"Token\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") + private UUID token; + + @Type(type="eu.eudat.typedefinition.XMLType") + @Column(name = "\"Properties\"", columnDefinition = "xml", nullable = true) + private String properties; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getInvitationEmail() { + return invitationEmail; + } + + public void setInvitationEmail(String invitationEmail) { + this.invitationEmail = invitationEmail; + } + + public UserInfo getUser() { + return user; + } + + public void setUser(UserInfo user) { + this.user = user; + } + + public DMP getDmp() { + return dmp; + } + + public void setDmp(DMP dmp) { + this.dmp = dmp; + } + + public UUID getToken() { + return token; + } + + public void setToken(UUID token) { + this.token = token; + } + + public String getProperties() { + return properties; + } + + public void setProperties(String properties) { + this.properties = properties; + } + + @Override + public void update(Invitation entity) { + + } + + @Override + public Object[] getKeys() { + return new UUID[]{this.id == null ? null : this.id}; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/entities/UserInfo.java b/dmp-backend/src/main/java/eu/eudat/entities/UserInfo.java index 3e782b4e2..bdd0684a6 100644 --- a/dmp-backend/src/main/java/eu/eudat/entities/UserInfo.java +++ b/dmp-backend/src/main/java/eu/eudat/entities/UserInfo.java @@ -157,7 +157,10 @@ public class UserInfo implements Serializable,DataEntity{ @Override public void update(UserInfo entity) { - + this.name = entity.getName(); + this.email = entity.getEmail(); + this.additionalinfo = entity.getAdditionalinfo(); + this.lastloggedin = entity.getLastloggedin(); } @Override 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 9fa25072f..e54184bd9 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java @@ -50,7 +50,7 @@ public class DataManagementPlanManager { DMP newDmp = dataManagementPlan.toDataModel(); createOrganisationsIfTheyDontExist(newDmp,apiContext.getDatabaseRepository().getOrganisationDao()); createResearchersIfTheyDontExist(newDmp,apiContext.getDatabaseRepository().getResearcherDao()); - UserInfo user = apiContext.getDatabaseRepository().getUserInfoDao().read(principal.getId()); + UserInfo user = apiContext.getDatabaseRepository().getUserInfoDao().find(principal.getId()); createProjectIfItDoesntExist(newDmp,apiContext.getDatabaseRepository().getProjectDao(),user); newDmp.setCreator(user); apiContext.getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); diff --git a/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java b/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java new file mode 100644 index 000000000..ff67c952b --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java @@ -0,0 +1,34 @@ +package eu.eudat.managers; + +import eu.eudat.entities.DMP; +import eu.eudat.entities.UserInfo; +import eu.eudat.models.invitation.Invitation; +import eu.eudat.models.userinfo.UserInfoInvitationModel; +import eu.eudat.models.userinfo.UserInfoRequestItem; +import eu.eudat.queryable.QueryableList; +import eu.eudat.services.ApiContext; +import eu.eudat.utilities.builders.DomainModelConverter; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * Created by ikalyvas on 1/4/2018. + */ +public class InvitationsManager { + + public static void inviteUsers(ApiContext apiContext, Invitation invitation) { + List alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList()); + List alreadySignedInUsersEntities = new DomainModelConverter().toDataModel(alreadySignedInUsers); + DMP dataManagementPlan = apiContext.getDatabaseRepository().getDmpDao().find(invitation.getDataManagementPlan()); + apiContext.getInvitationService().createInvitations(apiContext.getDatabaseRepository().getInvitationDao(),new DomainModelConverter().toDataModel(invitation.getUsers()),dataManagementPlan); + apiContext.getInvitationService().assignToDmp(apiContext.getDatabaseRepository().getDmpDao(), alreadySignedInUsersEntities, dataManagementPlan); + apiContext.getInvitationService().sendInvitations(invitation.getUsers()); + } + + public static List getUsers(ApiContext apiContext,UserInfoRequestItem userInfoRequestItem) throws InstantiationException, IllegalAccessException { + QueryableList users = apiContext.getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoRequestItem.getCriteria()); + List userModels = new DomainModelConverter().fromDataModel(users.toList(),UserInfoInvitationModel.class); + return userModels; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java b/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java index 0e6a6786d..91f707a48 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java @@ -72,7 +72,7 @@ public class ProjectManager { public static void createOrUpdate(ProjectDao projectRepository, UserInfoDao userInfoRepository, eu.eudat.models.project.Project project, Principal principal){ eu.eudat.entities.Project projectEntity = project.toDataModel(); - projectEntity.setCreationUser(userInfoRepository.read(principal.getId())); + projectEntity.setCreationUser(userInfoRepository.find(principal.getId())); projectRepository.createOrUpdate(projectEntity); } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/admin/components/datasetprofile/Field.java b/dmp-backend/src/main/java/eu/eudat/models/admin/components/datasetprofile/Field.java index ee4404e74..7fb9d4a34 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/admin/components/datasetprofile/Field.java +++ b/dmp-backend/src/main/java/eu/eudat/models/admin/components/datasetprofile/Field.java @@ -18,12 +18,14 @@ import java.util.stream.Collectors; public class Field implements ViewStyleDefinition,Comparable{ public enum ValidationType { - REQUIRED((short) 1); + NONE((short)0),REQUIRED((short) 1); private short value; private ValidationType(short value) { this.value = value; } public short getValue(){return value;} public static ValidationType fromInteger(int value) { switch (value) { + case 0: + return NONE; case 1: return REQUIRED; default: diff --git a/dmp-backend/src/main/java/eu/eudat/models/components/commons/datafield/BooleanDecisionData.java b/dmp-backend/src/main/java/eu/eudat/models/components/commons/datafield/BooleanDecisionData.java index 024af5326..d97fb4889 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/components/commons/datafield/BooleanDecisionData.java +++ b/dmp-backend/src/main/java/eu/eudat/models/components/commons/datafield/BooleanDecisionData.java @@ -9,8 +9,9 @@ public class BooleanDecisionData extends FieldData{ @Override public BooleanDecisionData fromData(Object data) { - this.setLabel((String)((Map)data).get("label")); - + if(data!=null){ + this.setLabel((String)((Map)data).get("label")); + } return this; } diff --git a/dmp-backend/src/main/java/eu/eudat/models/criteria/InvitationCriteria.java b/dmp-backend/src/main/java/eu/eudat/models/criteria/InvitationCriteria.java new file mode 100644 index 000000000..e3320133d --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/criteria/InvitationCriteria.java @@ -0,0 +1,9 @@ +package eu.eudat.models.criteria; + +import eu.eudat.entities.Invitation; + +/** + * Created by ikalyvas on 1/4/2018. + */ +public class InvitationCriteria extends Criteria{ +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/criteria/UserInfoCriteria.java b/dmp-backend/src/main/java/eu/eudat/models/criteria/UserInfoCriteria.java new file mode 100644 index 000000000..9b3d6562a --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/criteria/UserInfoCriteria.java @@ -0,0 +1,18 @@ +package eu.eudat.models.criteria; + +import eu.eudat.entities.UserInfo; + +/** + * Created by ikalyvas on 1/4/2018. + */ +public class UserInfoCriteria extends Criteria { + private String email; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/dmp/DataManagementPlan.java b/dmp-backend/src/main/java/eu/eudat/models/dmp/DataManagementPlan.java index e8a379a72..e9a3daac8 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/dmp/DataManagementPlan.java +++ b/dmp-backend/src/main/java/eu/eudat/models/dmp/DataManagementPlan.java @@ -2,7 +2,6 @@ package eu.eudat.models.dmp; import eu.eudat.entities.*; import eu.eudat.models.DataModel; -import eu.eudat.models.project.*; import eu.eudat.models.project.Project; import eu.eudat.utilities.builders.DomainModelConverter; import eu.eudat.utilities.builders.XmlBuilder; @@ -12,7 +11,6 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import java.util.*; -import java.util.stream.Collector; import java.util.stream.Collectors; public class DataManagementPlan implements DataModel{ @@ -26,7 +24,7 @@ public class DataManagementPlan implements DataModel{ private eu.eudat.models.project.Project project; private List organisations; private List researchers; - private UserInfo creator; + private eu.eudat.models.userinfo.UserInfo creator; private Date created; public UUID getId() { return id; @@ -92,11 +90,11 @@ public class DataManagementPlan implements DataModel{ this.project = project; } - public UserInfo getCreator() { + public eu.eudat.models.userinfo.UserInfo getCreator() { return creator; } - public void setCreator(UserInfo creator) { + public void setCreator(eu.eudat.models.userinfo.UserInfo creator) { this.creator = creator; } @@ -134,7 +132,7 @@ public class DataManagementPlan implements DataModel{ this.label = entity.getLabel(); this.project = new Project(); this.project.fromDataModel(entity.getProject()); - this.creator = new eu.eudat.models.dmp.UserInfo(); + this.creator = new eu.eudat.models.userinfo.UserInfo(); if(entity.getCreator()!=null)this.creator.fromDataModel(entity.getCreator()); if(entity.getAssociatedDmps()!=null&&!entity.getAssociatedDmps().isEmpty()){ diff --git a/dmp-backend/src/main/java/eu/eudat/models/invitation/Invitation.java b/dmp-backend/src/main/java/eu/eudat/models/invitation/Invitation.java new file mode 100644 index 000000000..35069cfcd --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/invitation/Invitation.java @@ -0,0 +1,31 @@ +package eu.eudat.models.invitation; + +import eu.eudat.models.userinfo.UserInfo; +import eu.eudat.models.userinfo.UserInfoInvitationModel; + +import java.util.List; +import java.util.UUID; + +/** + * Created by ikalyvas on 1/4/2018. + */ +public class Invitation { + private UUID dataManagementPlan; + private List users; + + public UUID getDataManagementPlan() { + return dataManagementPlan; + } + + public void setDataManagementPlan(UUID dataManagementPlan) { + this.dataManagementPlan = dataManagementPlan; + } + + public List getUsers() { + return users; + } + + public void setUsers(List users) { + this.users = users; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/dmp/UserInfo.java b/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfo.java similarity index 98% rename from dmp-backend/src/main/java/eu/eudat/models/dmp/UserInfo.java rename to dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfo.java index 65d8eb756..53340d6bd 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/dmp/UserInfo.java +++ b/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfo.java @@ -1,4 +1,4 @@ -package eu.eudat.models.dmp; +package eu.eudat.models.userinfo; import java.util.Date; import java.util.UUID; diff --git a/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoInvitationModel.java b/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoInvitationModel.java new file mode 100644 index 000000000..514444709 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoInvitationModel.java @@ -0,0 +1,56 @@ +package eu.eudat.models.userinfo; + +import eu.eudat.entities.*; +import eu.eudat.entities.UserInfo; +import eu.eudat.models.DataModel; + +import java.util.UUID; + +/** + * Created by ikalyvas on 1/4/2018. + */ +public class UserInfoInvitationModel implements DataModel{ + private UUID id; + private String email; + private String name; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public void fromDataModel(eu.eudat.entities.UserInfo entity) throws InstantiationException, IllegalAccessException { + this.id = entity.getId(); + this.email = entity.getEmail(); + this.name = entity.getName(); + } + + @Override + public eu.eudat.entities.UserInfo toDataModel() { + eu.eudat.entities.UserInfo userInfo = new UserInfo(); + userInfo.setId(this.id); + userInfo.setEmail(this.email); + userInfo.setName(this.name); + return userInfo; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoRequestItem.java b/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoRequestItem.java new file mode 100644 index 000000000..284217edc --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoRequestItem.java @@ -0,0 +1,10 @@ +package eu.eudat.models.userinfo; + +import eu.eudat.models.criteria.UserInfoCriteria; +import eu.eudat.models.helpers.requests.RequestItem; + +/** + * Created by ikalyvas on 1/4/2018. + */ +public class UserInfoRequestItem extends RequestItem{ +} diff --git a/dmp-backend/src/main/java/eu/eudat/security/validators/GoogleTokenValidator.java b/dmp-backend/src/main/java/eu/eudat/security/validators/GoogleTokenValidator.java index 040a95388..de77873a8 100644 --- a/dmp-backend/src/main/java/eu/eudat/security/validators/GoogleTokenValidator.java +++ b/dmp-backend/src/main/java/eu/eudat/security/validators/GoogleTokenValidator.java @@ -13,6 +13,7 @@ import eu.eudat.dao.entities.security.CredentialDao; import eu.eudat.dao.entities.security.UserTokenDao; import eu.eudat.entities.Credential; import eu.eudat.entities.UserToken; +import eu.eudat.models.criteria.UserInfoCriteria; import eu.eudat.models.login.LoginInfo; import eu.eudat.services.AuthenticationService; import org.springframework.beans.factory.annotation.Autowired; @@ -62,7 +63,9 @@ public class GoogleTokenValidator implements TokenValidator { GoogleIdToken idToken = this.verifyUserAndGetUser(token); Payload payload = idToken.getPayload(); - UserInfo userInfo = userInfoDao.getByMail(payload.getEmail()); + UserInfoCriteria criteria = new UserInfoCriteria(); + criteria.setEmail(payload.getEmail()); + UserInfo userInfo = userInfoDao.getWithCriteria(criteria).toList().get(0); final Credential credential = new Credential(); credential.setCreationTime(new Date()); @@ -81,7 +84,7 @@ public class GoogleTokenValidator implements TokenValidator { userInfo.setLastloggedin(new Date()); userInfo.setAuthorization_level(new Short("1")); userInfo.setUsertype(new Short("1")); - userInfo = userInfoDao.create(userInfo); + userInfo = userInfoDao.createOrUpdate(userInfo); credential.setUserInfo(userInfo); credentialDao.createOrUpdate(credential); } @@ -98,7 +101,7 @@ public class GoogleTokenValidator implements TokenValidator { credentialDao.createOrUpdate(credential); userInfo.getCredentials().add(credential); } - userInfo = userInfoDao.update(userInfo); + userInfo = userInfoDao.createOrUpdate(userInfo); } diff --git a/dmp-backend/src/main/java/eu/eudat/services/ApiContext.java b/dmp-backend/src/main/java/eu/eudat/services/ApiContext.java index 5849819a4..b46f7abd6 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/ApiContext.java +++ b/dmp-backend/src/main/java/eu/eudat/services/ApiContext.java @@ -9,5 +9,6 @@ import org.springframework.context.ApplicationContext; public interface ApiContext { DatabaseRepository getDatabaseRepository(); ApplicationContext getApplicationContext(); + InvitationService getInvitationService(); RemoteFetcher getRemoteFetcher(); } diff --git a/dmp-backend/src/main/java/eu/eudat/services/ApiContextImpl.java b/dmp-backend/src/main/java/eu/eudat/services/ApiContextImpl.java index 45ac340fb..1f73b93da 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/ApiContextImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/ApiContextImpl.java @@ -14,6 +14,7 @@ public class ApiContextImpl implements ApiContext{ private DatabaseRepository databaseRepository; private ApplicationContext applicationContext; private RemoteFetcher remoteFetcher; + private InvitationService invitationService; @Autowired public void setDatabaseRepository(DatabaseRepository databaseRepository) { @@ -44,4 +45,14 @@ public class ApiContextImpl implements ApiContext{ public void setRemoteFetcher(RemoteFetcher remoteFetcher) { this.remoteFetcher = remoteFetcher; } + + @Override + public InvitationService getInvitationService() { + return invitationService; + } + + @Autowired + public void setInvitationService(InvitationService invitationService) { + this.invitationService = invitationService; + } } diff --git a/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java b/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java index 51157ef3f..83570e5fd 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java +++ b/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java @@ -43,7 +43,7 @@ public class AuthenticationService { { if (token == null || token.getExpiresAt().before(new Date())) return null; - UserInfo user = this.userInfoDao.read(token.getUser().getId()); + UserInfo user = this.userInfoDao.find(token.getUser().getId()); if (user == null /*|| user.Status != ActivityStatus.Active*/) return null; //List appRoles = this._unitOfWork.UserRoles.GetAll().Where(x => x.UserId == token.UserId /*&& x.Status == ActivityStatus.Active*/).ToList(); diff --git a/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepository.java b/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepository.java index b025f12ea..7eb28e538 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepository.java +++ b/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepository.java @@ -20,4 +20,7 @@ public interface DatabaseRepository { ResearcherDao getResearcherDao(); ServiceDao getServiceDao(); UserInfoDao getUserInfoDao(); + InvitationDao getInvitationDao(); + DMPProfileDao getDmpProfileDao(); + DMPResearcherDao getDmpResearcherDao(); } diff --git a/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepositoryImpl.java b/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepositoryImpl.java index 425325bde..33752a7c2 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepositoryImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepositoryImpl.java @@ -24,6 +24,7 @@ public class DatabaseRepositoryImpl implements DatabaseRepository{ private ResearcherDao researcherDao; private ServiceDao serviceDao; private UserInfoDao userInfoDao; + private InvitationDao invitationDao; @Autowired private void setDataRepositoryDao(DataRepositoryDao dataRepositoryDao) { @@ -55,21 +56,11 @@ public class DatabaseRepositoryImpl implements DatabaseRepository{ this.dmpDao = dmpDao; } - @Autowired - private DMPProfileDao getDmpProfileDao() { - return dmpProfileDao; - } - @Autowired public void setDmpProfileDao(DMPProfileDao dmpProfileDao) { this.dmpProfileDao = dmpProfileDao; } - @Autowired - private DMPResearcherDao getDmpResearcherDao() { - return dmpResearcherDao; - } - @Autowired private void setDmpResearcherDao(DMPResearcherDao dmpResearcherDao) { this.dmpResearcherDao = dmpResearcherDao; @@ -174,4 +165,24 @@ public class DatabaseRepositoryImpl implements DatabaseRepository{ public UserInfoDao getUserInfoDao() { return userInfoDao; } + + @Override + public DMPProfileDao getDmpProfileDao() { + return dmpProfileDao; + } + + @Override + public DMPResearcherDao getDmpResearcherDao() { + return dmpResearcherDao; + } + + @Override + public InvitationDao getInvitationDao() { + return invitationDao; + } + + @Autowired + public void setInvitationDao(InvitationDao invitationDao) { + this.invitationDao = invitationDao; + } } diff --git a/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java b/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java new file mode 100644 index 000000000..bfaab8a1d --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java @@ -0,0 +1,24 @@ +package eu.eudat.services; + + +import eu.eudat.dao.entities.DMPDao; +import eu.eudat.dao.entities.InvitationDao; +import eu.eudat.entities.DMP; +import eu.eudat.entities.Invitation; +import eu.eudat.models.userinfo.UserInfo; +import eu.eudat.models.userinfo.UserInfoInvitationModel; + +import java.util.List; + +/** + * Created by ikalyvas on 1/4/2018. + */ +public interface InvitationService { + void assignToDmp(DMPDao dmpDao, List users, DMP dmp); + + void assignToDmp(DMPDao dmpDao, eu.eudat.entities.UserInfo user, DMP dmp); + + void createInvitations(InvitationDao invitationDao, List users, DMP dmp); + + void sendInvitations(List users); +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java new file mode 100644 index 000000000..005786eec --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java @@ -0,0 +1,49 @@ +package eu.eudat.services; + +import eu.eudat.dao.entities.DMPDao; +import eu.eudat.dao.entities.InvitationDao; +import eu.eudat.entities.DMP; +import eu.eudat.entities.Invitation; +import eu.eudat.models.userinfo.UserInfo; +import eu.eudat.models.userinfo.UserInfoInvitationModel; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.UUID; + +/** + * Created by ikalyvas on 1/4/2018. + */ +@Service("invitationService") +public class InvitationServiceImpl implements InvitationService { + @Override + public void assignToDmp(DMPDao dmpDao, List users, DMP dmp) { + for(eu.eudat.entities.UserInfo user : users){ + dmp.getUsers().add(user); + } + dmpDao.createOrUpdate(dmp); + } + + @Override + public void assignToDmp(DMPDao dmpDao, eu.eudat.entities.UserInfo user, DMP dmp) { + dmp.getUsers().add(user); + dmpDao.createOrUpdate(dmp); + } + + @Override + public void createInvitations(InvitationDao invitationDao, List users, DMP dmp) { + for(eu.eudat.entities.UserInfo userInfo : users){ + Invitation invitation = new Invitation(); + invitation.setDmp(dmp); + invitation.setInvitationEmail(userInfo.getEmail()); + invitation.setUser(userInfo); + invitation.setToken(UUID.randomUUID()); + invitationDao.createOrUpdate(invitation); + } + } + + @Override + public void sendInvitations(List users) { + + } +} diff --git a/dmp-frontend/src/app/invitation/invitation.component.html b/dmp-frontend/src/app/invitation/invitation.component.html new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/invitation/invitation.component.ts b/dmp-frontend/src/app/invitation/invitation.component.ts new file mode 100644 index 000000000..26c94324a --- /dev/null +++ b/dmp-frontend/src/app/invitation/invitation.component.ts @@ -0,0 +1,8 @@ +import { Component } from "@angular/core"; + +@Component({ + selector: 'app-invitation-component', + templateUrl: 'invitation.component.html', + }) + export class InvitationComponent { + } \ No newline at end of file