From 48ed8ac46914e135a116067a481f019c2b7a79ba Mon Sep 17 00:00:00 2001 From: Nikolaos Laskaris Date: Thu, 16 Nov 2017 17:43:17 +0200 Subject: [PATCH] Altered fetching logic for users and dmps --- .../main/java/dao/entities/UserInfoDao.java | 8 +++- .../java/dao/entities/UserInfoDaoImpl.java | 40 +++++++++++++++++-- dmp-backend/src/main/java/entities/DMP.java | 2 +- .../src/main/java/entities/Project.java | 15 ++++++- .../src/main/java/entities/UserInfo.java | 3 +- .../src/main/java/rest/entities/DMPs.java | 7 +--- .../src/main/java/rest/entities/Projects.java | 1 + .../src/main/java/rest/entities/Users.java | 35 ++++++++++++++++ dmp-backend/src/test/java/TestRest.java | 39 +++++++++++++++++- 9 files changed, 136 insertions(+), 14 deletions(-) diff --git a/dmp-backend/src/main/java/dao/entities/UserInfoDao.java b/dmp-backend/src/main/java/dao/entities/UserInfoDao.java index d97fbbb38..29ee3d138 100644 --- a/dmp-backend/src/main/java/dao/entities/UserInfoDao.java +++ b/dmp-backend/src/main/java/dao/entities/UserInfoDao.java @@ -1,13 +1,17 @@ package dao.entities; +import java.util.List; import java.util.UUID; import dao.Dao; +import entities.DMP; import entities.UserInfo; public interface UserInfoDao extends Dao { - public UserInfo getByIdAndMail(String identification, String email); + public UserInfo getUserInfo(String userID); + + public UserInfo getByIdAndMail(String id, String email); public UserInfo getByMail(String email); @@ -15,4 +19,6 @@ public interface UserInfoDao extends Dao { public UserInfo getByUsername(String username); + public List getDmpsOfUser(String userID); + } \ No newline at end of file diff --git a/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java b/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java index 6a1a76b17..305bbde6c 100644 --- a/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java +++ b/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java @@ -1,12 +1,14 @@ package dao.entities; import java.util.List; +import java.util.Set; import java.util.UUID; import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import dao.JpaDao; +import entities.DMP; import entities.UserInfo; import entities.security.UserAuth; @@ -21,10 +23,25 @@ public class UserInfoDaoImpl extends JpaDao implements UserInfoD @Override - public UserInfo getByIdAndMail(String identification, String email) { - String queryString = "FROM UserInfo userInfo where userInfo.identification = :userInfoID and userInfo.email = :userInfoEmail"; + public UserInfo getUserInfo(String userID) { + String queryString = "FROM UserInfo userInfo where userInfo.id = :userInfoID"; TypedQuery typedQuery = entityManager.createQuery(queryString, UserInfo.class); - typedQuery.setParameter("userInfoID", identification); + 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(); @@ -80,6 +97,23 @@ public class UserInfoDaoImpl extends JpaDao implements UserInfoD } } + @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 exceptions for the moment + ex.printStackTrace(); + return null; + } + + } + + diff --git a/dmp-backend/src/main/java/entities/DMP.java b/dmp-backend/src/main/java/entities/DMP.java index 9e56fcb5e..0932e6666 100644 --- a/dmp-backend/src/main/java/entities/DMP.java +++ b/dmp-backend/src/main/java/entities/DMP.java @@ -36,7 +36,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; @Entity @Table(name="\"DMP\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope = DMP.class) public class DMP implements Serializable { diff --git a/dmp-backend/src/main/java/entities/Project.java b/dmp-backend/src/main/java/entities/Project.java index 90919e81f..ff5bbebae 100644 --- a/dmp-backend/src/main/java/entities/Project.java +++ b/dmp-backend/src/main/java/entities/Project.java @@ -80,6 +80,9 @@ public class Project implements Serializable { @Column(name = "\"Status\"", nullable = false) private Short status; + @Type(type="org.hibernate.type.PostgresUUIDType") + @Column(name = "\"CreationUser\"") + private UUID creationUser; @Column(name = "\"Created\"") private Date created = null; @@ -210,7 +213,17 @@ public class Project implements Serializable { - public String toString() { + public UUID getCreationUser() { + return creationUser; + } + + + public void setCreationUser(UUID creationUser) { + this.creationUser = creationUser; + } + + + public String toString() { try { return new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(this).replace("\"", """); } catch (JsonProcessingException e) { diff --git a/dmp-backend/src/main/java/entities/UserInfo.java b/dmp-backend/src/main/java/entities/UserInfo.java index 8b107660f..3910d160e 100644 --- a/dmp-backend/src/main/java/entities/UserInfo.java +++ b/dmp-backend/src/main/java/entities/UserInfo.java @@ -85,10 +85,11 @@ public class UserInfo implements Serializable{ private Set dmps; - + /* public Set getDmpsNonDeleted(){ return getDmps().parallelStream().filter(dmp -> dmp.getStatus()>=0).collect(Collectors.toSet()); } + */ public Set getDmps() { return dmps; diff --git a/dmp-backend/src/main/java/rest/entities/DMPs.java b/dmp-backend/src/main/java/rest/entities/DMPs.java index 0d594172d..f7f4abc95 100644 --- a/dmp-backend/src/main/java/rest/entities/DMPs.java +++ b/dmp-backend/src/main/java/rest/entities/DMPs.java @@ -232,13 +232,8 @@ public class DMPs { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("You have not logged in. You shouldn't be here"); } - UserInfo userInfo = userInfoDao.read(UUID.fromString(userID)); - - if(userInfo==null) //this should normally never happer - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("There's no such a user on the system. You shouldn't be here"); - try { - Set nonDeleted = userInfo.getDmpsNonDeleted(); + List nonDeleted = userInfoDao.getDmpsOfUser(userID); return ResponseEntity.status(HttpStatus.OK).body(SerializerProvider.toJson(nonDeleted)); } catch(Exception ex) { diff --git a/dmp-backend/src/main/java/rest/entities/Projects.java b/dmp-backend/src/main/java/rest/entities/Projects.java index 2990c5d2b..4405fafa7 100644 --- a/dmp-backend/src/main/java/rest/entities/Projects.java +++ b/dmp-backend/src/main/java/rest/entities/Projects.java @@ -257,6 +257,7 @@ public class Projects { project.setId(null); project.setStatus(new Short("0")); + project.setCreationUser(userInfo.getId()); project.setCreated(new Date()); project.setModified(new Date()); diff --git a/dmp-backend/src/main/java/rest/entities/Users.java b/dmp-backend/src/main/java/rest/entities/Users.java index 0a611c286..9b97ee93b 100644 --- a/dmp-backend/src/main/java/rest/entities/Users.java +++ b/dmp-backend/src/main/java/rest/entities/Users.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PathVariable; @@ -36,6 +37,7 @@ import dao.entities.ProjectDao; import dao.entities.RegistryDao; import dao.entities.ResearcherDao; import dao.entities.ServiceDao; +import dao.entities.UserInfoDao; import entities.DMP; import entities.DMPProfile; import entities.DataRepository; @@ -47,6 +49,7 @@ import entities.Project; import entities.Registry; import entities.Researcher; import entities.Service; +import entities.UserInfo; import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -68,6 +71,38 @@ public class Users { @Autowired private RegistryDao registryDao; @Autowired private ResearcherDao researcherDao; @Autowired private ServiceDao serviceDao; + @Autowired private UserInfoDao userInfoDao; + + + + @RequestMapping(method = RequestMethod.GET, value = { "/user/whoami" }, produces="application/json") + public @ResponseBody ResponseEntity whoami(){ + + + String userID = null; + try { + userID = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString(); + } catch(NullPointerException ex) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("You have not logged in. You shouldn't be here"); + } + + UserInfo userInfo = userInfoDao.getUserInfo(userID); + + + if(userInfo==null) //this should normally never happer + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("There's no such a user on the system. You shouldn't be here"); + + + try { + + return new ResponseEntity(SerializerProvider.toJson(userInfo), HttpStatus.OK); + } + catch(Exception ex) { + ex.printStackTrace(); + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + } + } + diff --git a/dmp-backend/src/test/java/TestRest.java b/dmp-backend/src/test/java/TestRest.java index 9b9701dc7..b2fbcefaa 100644 --- a/dmp-backend/src/test/java/TestRest.java +++ b/dmp-backend/src/test/java/TestRest.java @@ -3,6 +3,7 @@ import static org.junit.Assert.*; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.UUID; import org.junit.Before; @@ -17,6 +18,7 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.CollectionType; import com.fasterxml.jackson.databind.type.TypeFactory; @@ -201,7 +203,7 @@ public class TestRest { } - @Test + //@Test public void testDmpClone() { System.out.println(dmpsService.getDmpsOfUser().getBody()); @@ -266,5 +268,40 @@ public class TestRest { } + @Test + public void testProject2() { + + +// String a = null; +// try { +// //a = (String)dmpsService.getDmpsOfUser().getBody(); +// +// Set dmps = new ObjectMapper().readValue(dmpsService.getDmpsOfUser().getBody().toString(), new TypeReference>(){}); +// System.out.println(dmps); +// +//// Set dmps = SerializerProvider.fromJson((String)dmpsService.getDmpsOfUser().getBody(), new TypeReference>(){}); +// } catch (Exception e) { +// +// e.printStackTrace(); +// } + + + CollectionType typeReference = TypeFactory.defaultInstance().constructCollectionType(List.class, DMP.class); + List dmps = null; + try { + dmps = SerializerProvider.fromJson(dmpsService.getDmpsOfUser().getBody().toString(), typeReference) ; + System.out.println(dmps); + } catch (Exception e) { + e.printStackTrace(); + fail("Should not have thrown any exception"); + } + + + assertEquals("aaa", "aaa"); + + } + + + }