From cd8b338d0662c1aa46bd6c52ec2c3d1b0fb6b56d Mon Sep 17 00:00:00 2001 From: Ioannis Kalyvas Date: Fri, 2 Feb 2018 12:33:37 +0200 Subject: [PATCH] no message --- .../controllers/DashBoardController.java | 17 +++- .../eu/eudat/dao/DatabaseAccessLayer.java | 7 +- .../eu/eudat/dao/entities/DMPDaoImpl.java | 92 ++++++++++--------- .../dao/entities/DataRepositoryDaoImpl.java | 5 + .../eu/eudat/dao/entities/DatasetDaoImpl.java | 5 + .../dao/entities/DatasetProfileDaoImpl.java | 5 + .../dao/entities/ExternalDatasetDaoImpl.java | 5 + .../eudat/dao/entities/InvitationDaoImpl.java | 5 + .../dao/entities/OrganisationDaoImpl.java | 5 + .../eu/eudat/dao/entities/ProjectDao.java | 4 + .../eu/eudat/dao/entities/ProjectDaoImpl.java | 13 ++- .../eudat/dao/entities/RegistryDaoImpl.java | 5 + .../eudat/dao/entities/ResearcherDaoImpl.java | 5 + .../eu/eudat/dao/entities/ServiceDaoImpl.java | 5 + .../eudat/dao/entities/UserInfoDaoImpl.java | 16 +++- .../eu/eudat/dao/entities/UserRoleDao.java | 3 + .../eudat/dao/entities/UserRoleDaoImpl.java | 25 ++++- .../entities/security/CredentialDaoImpl.java | 6 ++ .../dao/entities/security/UserTokenDao.java | 4 +- .../entities/security/UserTokenDaoImpl.java | 6 ++ .../main/java/eu/eudat/entities/UserInfo.java | 6 +- .../eu/eudat/managers/DashBoardManager.java | 34 +++++-- .../java/eu/eudat/managers/UserManager.java | 1 + .../models/criteria/UserInfoCriteria.java | 11 +++ .../models/criteria/UserRoleCriteria.java | 20 ++++ .../userinfo/UserInfoTableRequestItem.java | 4 + .../eu/eudat/queryable/QueryableList.java | 3 +- .../QueryableHibernateList.java | 28 +++--- dmp-frontend/package-lock.json | 22 ++--- dmp-frontend/package.json | 2 +- .../app/models/criteria/users/UserCriteria.ts | 6 +- .../src/app/models/login/Principal.ts | 4 +- .../users/users-criteria.component.html | 4 +- .../users/users-criteria.component.ts | 10 +- .../navigation/navigation.component.html | 1 + dmp-frontend/src/assets/lang/en.json | 4 +- 36 files changed, 294 insertions(+), 104 deletions(-) create mode 100644 dmp-backend/src/main/java/eu/eudat/models/criteria/UserRoleCriteria.java diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DashBoardController.java b/dmp-backend/src/main/java/eu/eudat/controllers/DashBoardController.java index a3f404e3d..71cc178fc 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DashBoardController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DashBoardController.java @@ -28,7 +28,7 @@ public class DashBoardController extends BaseController{ } @RequestMapping(method = RequestMethod.GET, value = { "/dashboard/getStatistics" }, produces="application/json") - public ResponseEntity> getStatistics(Principal principal){ + public ResponseEntity> getStatistics(){ try { DashBoardStatistics statistics = new DashBoardManager().getStatistics(this.getApiContext().getDatabaseRepository().getDatasetDao(), this.getApiContext().getDatabaseRepository().getDmpDao() , this.getApiContext().getDatabaseRepository().getProjectDao()); @@ -38,5 +38,18 @@ public class DashBoardController extends BaseController{ ex.printStackTrace(); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage())); } - } + } + + @RequestMapping(method = RequestMethod.GET, value = { "/dashboard/me/getStatistics" }, produces="application/json") + public ResponseEntity> getStatistics(Principal principal){ + try { + DashBoardStatistics statistics = new DashBoardManager().getMeStatistics(this.getApiContext().getDatabaseRepository().getDatasetDao(), this.getApiContext().getDatabaseRepository().getDmpDao() + , this.getApiContext().getDatabaseRepository().getProjectDao(),principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(statistics)); + } + catch(Exception ex) { + ex.printStackTrace(); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage())); + } + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/DatabaseAccessLayer.java b/dmp-backend/src/main/java/eu/eudat/dao/DatabaseAccessLayer.java index 93baf4cfb..44f179f0e 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/DatabaseAccessLayer.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/DatabaseAccessLayer.java @@ -1,10 +1,15 @@ package eu.eudat.dao; -public interface DatabaseAccessLayer { +import eu.eudat.entities.DataEntity; +import eu.eudat.queryable.QueryableList; + +public interface DatabaseAccessLayer, I> { T createOrUpdate(T item); T find(I id); void delete(T item); + + QueryableList asQueryable(); } 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 3ea0b8c39..565fc4258 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 @@ -1,6 +1,7 @@ package eu.eudat.dao.entities; import java.util.UUID; + import eu.eudat.dao.DatabaseAccess; import eu.eudat.dao.databaselayer.service.DatabaseService; import eu.eudat.entities.DatasetProfile; @@ -17,52 +18,61 @@ import org.springframework.stereotype.Component; public class DMPDaoImpl extends DatabaseAccess implements DMPDao { - @Autowired - public DMPDaoImpl(DatabaseService databaseService) { - this.setDatabaseService(databaseService); - } + @Autowired + public DMPDaoImpl(DatabaseService databaseService) { + this.setDatabaseService(databaseService); + } - @Override - public QueryableList getWithCriteria(DataManagementPlanCriteria criteria) { - QueryableList query = getDatabaseService().getQueryable(DMP.getHints(),DMP.class); - if(criteria.getLike()!=null&&!criteria.getLike().isEmpty())query.where((builder, root) -> builder.like(root.get("label"),"%"+criteria.getLike()+"%")); - if(criteria.getPeriodEnd()!=null)query.where((builder, root) -> builder.lessThan(root.get("created"),criteria.getPeriodEnd())); - if(criteria.getPeriodStart()!=null)query.where((builder, root) -> builder.greaterThan(root.get("created"),criteria.getPeriodStart())); - if(criteria.getProjects()!=null&&!criteria.getProjects().isEmpty())query.where(((builder, root) -> root.get("project").in(criteria.getProjectEntities()))); - return query; - } + @Override + public QueryableList getWithCriteria(DataManagementPlanCriteria criteria) { + QueryableList query = getDatabaseService().getQueryable(DMP.getHints(), DMP.class); + if (criteria.getLike() != null && !criteria.getLike().isEmpty()) + query.where((builder, root) -> builder.like(root.get("label"), "%" + criteria.getLike() + "%")); + if (criteria.getPeriodEnd() != null) + query.where((builder, root) -> builder.lessThan(root.get("created"), criteria.getPeriodEnd())); + if (criteria.getPeriodStart() != null) + query.where((builder, root) -> builder.greaterThan(root.get("created"), criteria.getPeriodStart())); + if (criteria.getProjects() != null && !criteria.getProjects().isEmpty()) + query.where(((builder, root) -> root.get("project").in(criteria.getProjectEntities()))); + 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; - } + 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.getDatabaseService().createOrUpdate(item,DMP.class); - } + @Override + public DMP createOrUpdate(DMP item) { + return this.getDatabaseService().createOrUpdate(item, DMP.class); + } - @Override - public DMP find(UUID id) { - return getDatabaseService().getQueryable(DMP.class).where((builder, root) -> builder.equal((root.get("id")),id)).getSingle(); - } + @Override + public DMP find(UUID id) { + return getDatabaseService().getQueryable(DMP.class).where((builder, root) -> builder.equal((root.get("id")), id)).getSingle(); + } - @Override - public QueryableList getUserDmps(DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, UserInfo userInfo) { - QueryableList query = getDatabaseService().getQueryable(DMP.class).where((builder, root) -> builder.or(builder.equal(root.get("creator"),userInfo),builder.isMember(userInfo,root.get("users")))); - if(datasetWizardAutocompleteRequest.getCriteria().getLike()!=null&&!datasetWizardAutocompleteRequest.getCriteria().getLike().isEmpty()){ - query.where((builder, root) -> builder.like(root.get("label"),"%"+datasetWizardAutocompleteRequest.getCriteria().getLike()+"%")); - } - return query; - } + @Override + public QueryableList getUserDmps(DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, UserInfo userInfo) { + QueryableList query = getDatabaseService().getQueryable(DMP.class).where((builder, root) -> builder.or(builder.equal(root.get("creator"), userInfo), builder.isMember(userInfo, root.get("users")))); + if (datasetWizardAutocompleteRequest.getCriteria().getLike() != null && !datasetWizardAutocompleteRequest.getCriteria().getLike().isEmpty()) { + query.where((builder, root) -> builder.like(root.get("label"), "%" + datasetWizardAutocompleteRequest.getCriteria().getLike() + "%")); + } + return query; + } - @Override - public Long count() { - return this.getDatabaseService().count(DMP.class); - } + @Override + public Long count() { + return this.getDatabaseService().count(DMP.class); + } - @Override - public void delete(DMP item) { - this.getDatabaseService().delete(item); - } + @Override + public void delete(DMP item) { + this.getDatabaseService().delete(item); + } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(DMP.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DataRepositoryDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DataRepositoryDaoImpl.java index 4d342a2aa..764ca5a2c 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DataRepositoryDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DataRepositoryDaoImpl.java @@ -41,4 +41,9 @@ public class DataRepositoryDaoImpl extends DatabaseAccess implem public void delete(DataRepository item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(DataRepository.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java index 9d5d41016..a382c5f8a 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java @@ -56,4 +56,9 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa public void delete(Dataset item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(Dataset.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetProfileDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetProfileDaoImpl.java index 4bf73aa20..b71b1d97d 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetProfileDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetProfileDaoImpl.java @@ -45,4 +45,9 @@ public class DatasetProfileDaoImpl extends DatabaseAccess implem public void delete(DatasetProfile item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(DatasetProfile.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/ExternalDatasetDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/ExternalDatasetDaoImpl.java index 8dde0b597..e15995fcd 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/ExternalDatasetDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/ExternalDatasetDaoImpl.java @@ -41,4 +41,9 @@ public class ExternalDatasetDaoImpl extends DatabaseAccess impl public void delete(ExternalDataset item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(ExternalDataset.class); + } } 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 index 6bde2900a..b0457256c 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/InvitationDaoImpl.java @@ -39,4 +39,9 @@ public class InvitationDaoImpl extends DatabaseAccess implements Inv public void delete(Invitation item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(Invitation.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/OrganisationDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/OrganisationDaoImpl.java index 475c6e35a..2afbec59d 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/OrganisationDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/OrganisationDaoImpl.java @@ -42,4 +42,9 @@ public class OrganisationDaoImpl extends DatabaseAccess implements public void delete(Organisation item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(Organisation.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/ProjectDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/ProjectDao.java index 65f4bd3a2..3ebd35dd2 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/ProjectDao.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/ProjectDao.java @@ -3,8 +3,10 @@ package eu.eudat.dao.entities; import java.util.UUID; import eu.eudat.dao.DatabaseAccessLayer; +import eu.eudat.entities.Dataset; import eu.eudat.entities.Organisation; import eu.eudat.entities.Project; +import eu.eudat.entities.UserInfo; import eu.eudat.models.criteria.ProjectCriteria; import eu.eudat.queryable.QueryableList; @@ -12,5 +14,7 @@ public interface ProjectDao extends DatabaseAccessLayer { QueryableList getWithCriteria(ProjectCriteria criteria); + QueryableList getAuthenticated(QueryableList query, UserInfo principal); + Long count(); } \ No newline at end of file diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/ProjectDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/ProjectDaoImpl.java index 291e2499c..fc60106c0 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/ProjectDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/ProjectDaoImpl.java @@ -3,11 +3,10 @@ package eu.eudat.dao.entities; import java.util.UUID; import eu.eudat.dao.DatabaseAccess; import eu.eudat.dao.databaselayer.service.DatabaseService; -import eu.eudat.entities.Organisation; +import eu.eudat.entities.*; import eu.eudat.models.criteria.ProjectCriteria; import eu.eudat.queryable.QueryableList; -import eu.eudat.entities.Project; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -48,4 +47,14 @@ public class ProjectDaoImpl extends DatabaseAccess implements ProjectDa public void delete(Project item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(Project.class); + } + + public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { + query.where((builder, root) -> builder.equal(root.get("creator"), principal)); + return query; + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/RegistryDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/RegistryDaoImpl.java index 6609d11d5..21a5487d3 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/RegistryDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/RegistryDaoImpl.java @@ -41,4 +41,9 @@ public class RegistryDaoImpl extends DatabaseAccess implements Registr public void delete(Registry item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(Registry.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/ResearcherDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/ResearcherDaoImpl.java index e4bfbe986..bdbfcf57b 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/ResearcherDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/ResearcherDaoImpl.java @@ -41,4 +41,9 @@ public class ResearcherDaoImpl extends DatabaseAccess implements Res public void delete(Researcher item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(Researcher.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/ServiceDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/ServiceDaoImpl.java index 62f00e1bc..3e86f2df9 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/ServiceDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/ServiceDaoImpl.java @@ -41,4 +41,9 @@ public class ServiceDaoImpl extends DatabaseAccess implements ServiceDa public void delete(Service item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(Service.class); + } } 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 07239760f..7729e8e82 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 @@ -1,5 +1,6 @@ package eu.eudat.dao.entities; +import java.util.Arrays; import java.util.UUID; import eu.eudat.dao.DatabaseAccess; @@ -22,25 +23,32 @@ public class UserInfoDaoImpl extends DatabaseAccess implements UserInf @Override public QueryableList getWithCriteria(UserInfoCriteria criteria) { QueryableList users = this.getDatabaseService().getQueryable(UserInfo.class); + if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty()) + users.where((builder, root) -> root.join("userRoles").get("role").in(criteria.getAppRoles())); 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())); + if (criteria.getEmail() != null) + users.where((builder, root) -> builder.equal(root.get("email"), criteria.getEmail())); return users; } @Override public UserInfo createOrUpdate(UserInfo item) { - return this.getDatabaseService().createOrUpdate(item,UserInfo.class); + return this.getDatabaseService().createOrUpdate(item, UserInfo.class); } @Override public UserInfo find(UUID id) { - return this.getDatabaseService().getQueryable(UserInfo.class).where((builder, root) -> builder.equal(root.get("id"),id)).getSingle(); + return this.getDatabaseService().getQueryable(UserInfo.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle(); } @Override public void delete(UserInfo item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(UserInfo.class); + } } \ No newline at end of file diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/UserRoleDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/UserRoleDao.java index 6b0363727..20c2072d2 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/UserRoleDao.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/UserRoleDao.java @@ -3,6 +3,8 @@ package eu.eudat.dao.entities; import eu.eudat.dao.DatabaseAccessLayer; import eu.eudat.entities.UserInfo; import eu.eudat.entities.UserRole; +import eu.eudat.models.criteria.UserRoleCriteria; +import eu.eudat.queryable.QueryableList; import java.util.List; import java.util.UUID; @@ -10,5 +12,6 @@ import java.util.UUID; public interface UserRoleDao extends DatabaseAccessLayer { + QueryableList getWithCriteria(UserRoleCriteria criteria); List getUserRoles(UserInfo userInfo); } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/UserRoleDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/UserRoleDaoImpl.java index 63a9a47f7..e4e8e8457 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/UserRoleDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/UserRoleDaoImpl.java @@ -5,6 +5,8 @@ import eu.eudat.dao.DatabaseAccessLayer; import eu.eudat.dao.databaselayer.service.DatabaseService; import eu.eudat.entities.UserInfo; import eu.eudat.entities.UserRole; +import eu.eudat.models.criteria.UserRoleCriteria; +import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -13,7 +15,7 @@ import java.util.UUID; @Component("userRoleDao") -public class UserRoleDaoImpl extends DatabaseAccess implements UserRoleDao{ +public class UserRoleDaoImpl extends DatabaseAccess implements UserRoleDao { @Autowired public UserRoleDaoImpl(DatabaseService databaseService) { @@ -22,21 +24,36 @@ public class UserRoleDaoImpl extends DatabaseAccess implements UserRo @Override public UserRole createOrUpdate(UserRole item) { - return this.getDatabaseService().createOrUpdate(item,UserRole.class); + return this.getDatabaseService().createOrUpdate(item, UserRole.class); } @Override public UserRole find(UUID id) { - return this.getDatabaseService().getQueryable(UserRole.class).where((builder, root) -> builder.equal(root.get("id"),id)).getSingleOrDefault(); + return this.getDatabaseService().getQueryable(UserRole.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); } @Override public List getUserRoles(UserInfo userInfo) { - return this.getDatabaseService().getQueryable(UserRole.class).where((builder, root) -> builder.equal(root.get("userInfo"),userInfo)).toList(); + return this.getDatabaseService().getQueryable(UserRole.class).where((builder, root) -> builder.equal(root.get("userInfo"), userInfo)).toList(); } @Override public void delete(UserRole item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList getWithCriteria(UserRoleCriteria criteria) { + QueryableList query = this.getDatabaseService().getQueryable(UserRole.class); + if (criteria.getLike() != null) + query.where((builder, root) -> builder.equal(root.get("userInfo").get("name"), criteria.getLike())); + if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty()) + query.where((builder, root) -> root.get("role").in(criteria.getAppRoles())); + return query; + } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(UserRole.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/security/CredentialDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/security/CredentialDaoImpl.java index 242fca53a..0a9d51c06 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/security/CredentialDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/security/CredentialDaoImpl.java @@ -5,6 +5,7 @@ import eu.eudat.dao.databaselayer.service.DatabaseService; import eu.eudat.entities.Credential; import eu.eudat.entities.UserInfo; import eu.eudat.models.login.Credentials; +import eu.eudat.queryable.QueryableList; import eu.eudat.security.validators.TokenValidatorFactoryImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -44,4 +45,9 @@ public class CredentialDaoImpl extends DatabaseAccess implements Cre public void delete(Credential item) { this.getDatabaseService().delete(item); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(Credential.class); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/security/UserTokenDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/security/UserTokenDao.java index 6715270dd..590178563 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/security/UserTokenDao.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/security/UserTokenDao.java @@ -1,11 +1,13 @@ package eu.eudat.dao.entities.security; +import eu.eudat.dao.DatabaseAccessLayer; +import eu.eudat.entities.Credential; import eu.eudat.entities.UserToken; import java.util.UUID; -public interface UserTokenDao { +public interface UserTokenDao extends DatabaseAccessLayer { UserToken createOrUpdate(UserToken item); diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/security/UserTokenDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/security/UserTokenDaoImpl.java index 7b6e205d5..ca72ba65c 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/security/UserTokenDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/security/UserTokenDaoImpl.java @@ -3,6 +3,7 @@ package eu.eudat.dao.entities.security; import eu.eudat.dao.DatabaseAccess; import eu.eudat.dao.databaselayer.service.DatabaseService; import eu.eudat.entities.UserToken; +import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -31,4 +32,9 @@ public class UserTokenDaoImpl extends DatabaseAccess implements UserT public void delete(UserToken userToken) { this.getDatabaseService().delete(userToken); } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(UserToken.class); + } } 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 d6a229916..7c01997d4 100644 --- a/dmp-backend/src/main/java/eu/eudat/entities/UserInfo.java +++ b/dmp-backend/src/main/java/eu/eudat/entities/UserInfo.java @@ -62,10 +62,10 @@ public class UserInfo implements DataEntity{ private Set dmps; @OneToMany(mappedBy="userInfo",fetch = FetchType.LAZY) - Set credentials = new HashSet<>(); + private Set credentials = new HashSet<>(); - @OneToMany(mappedBy="userInfo",fetch = FetchType.LAZY) - Set userRoles = new HashSet<>(); + @OneToMany(mappedBy="userInfo",fetch = FetchType.EAGER) + private Set userRoles = new HashSet<>(); public Set getDmps() { return dmps; diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DashBoardManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DashBoardManager.java index df9c0c644..f7ecf0155 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DashBoardManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DashBoardManager.java @@ -3,16 +3,34 @@ package eu.eudat.managers; import eu.eudat.dao.entities.DMPDao; import eu.eudat.dao.entities.DatasetDao; import eu.eudat.dao.entities.ProjectDao; +import eu.eudat.entities.DMP; +import eu.eudat.entities.Dataset; +import eu.eudat.entities.Project; +import eu.eudat.entities.UserInfo; import eu.eudat.models.dashboard.DashBoardStatistics; +import eu.eudat.models.security.Principal; + +import java.lang.reflect.Array; +import java.util.Arrays; public class DashBoardManager { - - public DashBoardStatistics getStatistics(DatasetDao datasetRepository,DMPDao dataManagementPlanRepository,ProjectDao projectRepository){ - DashBoardStatistics statistics = new DashBoardStatistics(); - statistics.setTotalDataManagementPlanCount(dataManagementPlanRepository.count()); - statistics.setTotalDataSetCount(datasetRepository.count()); - statistics.setTotalProjectCount(projectRepository.count()); - return statistics; - } + + public DashBoardStatistics getStatistics(DatasetDao datasetRepository, DMPDao dataManagementPlanRepository, ProjectDao projectRepository) { + DashBoardStatistics statistics = new DashBoardStatistics(); + statistics.setTotalDataManagementPlanCount(dataManagementPlanRepository.count()); + statistics.setTotalDataSetCount(datasetRepository.count()); + statistics.setTotalProjectCount(projectRepository.count()); + return statistics; + } + + public DashBoardStatistics getMeStatistics(DatasetDao datasetRepository, DMPDao dataManagementPlanRepository, ProjectDao projectRepository, Principal principal) { + DashBoardStatistics statistics = new DashBoardStatistics(); + UserInfo user = new UserInfo(); + user.setId(principal.getId()); + statistics.setTotalDataManagementPlanCount(dataManagementPlanRepository.asQueryable().where((builder, root) -> builder.equal(root.get("creator").get("id"), principal.getId())).count()); + statistics.setTotalDataSetCount(datasetRepository.asQueryable().where((builder, root) -> builder.equal(root.get("creator").get("id"), principal.getId())).count()); + statistics.setTotalProjectCount(projectRepository.asQueryable().where((builder, root) -> builder.equal(root.get("creationUser").get("id"), principal.getId())).count()); + return statistics; + } } diff --git a/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java b/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java index 37c09dea7..65d453042 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java @@ -38,6 +38,7 @@ public class UserManager { public static DataTableData getPaged(UserInfoDao userInfoDao, UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { QueryableList users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria()); QueryableList pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem); + List modelUsers = new DomainModelConverter().fromDataModel(pagedUsers.toList(), UserListingModel.class); DataTableData dataTableData = new DataTableData<>(); dataTableData.setData(modelUsers); 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 index 28b79ec8c..e9f35da97 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/criteria/UserInfoCriteria.java +++ b/dmp-backend/src/main/java/eu/eudat/models/criteria/UserInfoCriteria.java @@ -2,9 +2,20 @@ package eu.eudat.models.criteria; import eu.eudat.entities.UserInfo; +import java.util.List; + public class UserInfoCriteria extends Criteria { private String email; + private List appRoles; + + public List getAppRoles() { + return appRoles; + } + + public void setAppRoles(List appRoles) { + this.appRoles = appRoles; + } public String getEmail() { return email; diff --git a/dmp-backend/src/main/java/eu/eudat/models/criteria/UserRoleCriteria.java b/dmp-backend/src/main/java/eu/eudat/models/criteria/UserRoleCriteria.java new file mode 100644 index 000000000..2566a81f2 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/criteria/UserRoleCriteria.java @@ -0,0 +1,20 @@ +package eu.eudat.models.criteria; + +import eu.eudat.entities.UserRole; + +import java.util.List; + +/** + * Created by ikalyvas on 2/1/2018. + */ +public class UserRoleCriteria extends Criteria { + private List appRoles; + + public List getAppRoles() { + return appRoles; + } + + public void setAppRoles(List appRoles) { + this.appRoles = appRoles; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoTableRequestItem.java b/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoTableRequestItem.java index d3f0708d0..669e679e3 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoTableRequestItem.java +++ b/dmp-backend/src/main/java/eu/eudat/models/userinfo/UserInfoTableRequestItem.java @@ -1,8 +1,12 @@ package eu.eudat.models.userinfo; import eu.eudat.models.criteria.UserInfoCriteria; +import eu.eudat.models.criteria.UserRoleCriteria; import eu.eudat.models.helpers.requests.TableRequest; +import java.util.List; + public class UserInfoTableRequestItem extends TableRequest { + } diff --git a/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java b/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java index 48bff08db..e19ab2fd7 100644 --- a/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java +++ b/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java @@ -10,7 +10,7 @@ import javax.xml.crypto.Data; import java.util.List; import java.util.Set; -public interface QueryableList> { +public interface QueryableList> { QueryableList where(SinglePredicate predicate); List select(SelectPredicate predicate); @@ -36,4 +36,5 @@ public interface QueryableList> { QueryableList withHint(String hint); Long count(); + } diff --git a/dmp-backend/src/main/java/eu/eudat/queryable/hibernatequeryablelist/QueryableHibernateList.java b/dmp-backend/src/main/java/eu/eudat/queryable/hibernatequeryablelist/QueryableHibernateList.java index eda14f829..864ac7e8f 100644 --- a/dmp-backend/src/main/java/eu/eudat/queryable/hibernatequeryablelist/QueryableHibernateList.java +++ b/dmp-backend/src/main/java/eu/eudat/queryable/hibernatequeryablelist/QueryableHibernateList.java @@ -22,7 +22,7 @@ public class QueryableHibernateList> implements Queryabl private CriteriaQuery query; private Class tClass; private Root root; - private List predicates = new LinkedList(); + private List> predicates = new LinkedList<>(); private List orderings = new LinkedList<>(); private List fields = new LinkedList<>(); private Integer length; @@ -75,7 +75,7 @@ public class QueryableHibernateList> implements Queryabl } public QueryableList where(SinglePredicate predicate) { - this.predicates.add(predicate.applyPredicate(this.manager.getCriteriaBuilder(), this.root)); + this.predicates.add(predicate); return this; } @@ -106,14 +106,23 @@ public class QueryableHibernateList> implements Queryabl public Long count() { CriteriaBuilder criteriaBuilder = this.manager.getCriteriaBuilder(); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Long.class); - criteriaQuery.select(criteriaBuilder.count(criteriaQuery.from(this.tClass))); - criteriaQuery.where(this.predicates.toArray(new Predicate[this.predicates.size()])); + Root root = criteriaQuery.from(tClass); + criteriaQuery.select(criteriaBuilder.count(root)); + criteriaQuery.where(this.generateWherePredicates(this.predicates, root)); return this.manager.createQuery(criteriaQuery).getSingleResult(); } + private Predicate[] generateWherePredicates(List> singlePredicates, Root root) { + List predicates = new LinkedList<>(); + for (SinglePredicate singlePredicate : singlePredicates) { + predicates.add(singlePredicate.applyPredicate(this.manager.getCriteriaBuilder(), root)); + } + return predicates.toArray(new Predicate[predicates.size()]); + } + public List toList() { - this.query.where(this.predicates.toArray(new Predicate[this.predicates.size()])); + this.query.where(this.generateWherePredicates(this.predicates, this.root)); if (!this.orderings.isEmpty()) this.query.orderBy(this.orderings); TypedQuery typedQuery = this.manager.createQuery(this.query); if (this.offset != null) typedQuery.setFirstResult(this.offset); @@ -126,18 +135,13 @@ public class QueryableHibernateList> implements Queryabl } public T getSingle() { - Predicate[] array = new Predicate[this.predicates.size()]; - this.predicates.toArray(array); - this.query.where(array); - + this.query.where(this.generateWherePredicates(this.predicates, this.root)); TypedQuery typedQuery = this.manager.createQuery(this.query); return typedQuery.getSingleResult(); } public T getSingleOrDefault() { - Predicate[] array = new Predicate[this.predicates.size()]; - this.predicates.toArray(array); - this.query.where(array); + this.query.where(this.generateWherePredicates(this.predicates, this.root)); TypedQuery typedQuery = this.manager.createQuery(this.query); List results = typedQuery.getResultList(); diff --git a/dmp-frontend/package-lock.json b/dmp-frontend/package-lock.json index 7c25c48da..e183c36b3 100644 --- a/dmp-frontend/package-lock.json +++ b/dmp-frontend/package-lock.json @@ -782,7 +782,7 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.0", + "core-js": "2.4.1", "regenerator-runtime": "0.11.1" } }, @@ -1617,9 +1617,9 @@ } }, "core-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", - "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" }, "core-object": { "version": "3.1.5", @@ -6456,11 +6456,11 @@ } }, "rxjs": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz", - "integrity": "sha512-fSNi+y+P9ss+EZuV0GcIIqPUK07DEaMRUtLJvdcvMyFjc9dizuDjere+A4V7JrLGnm9iCc+nagV/4QdMTkqC4A==", + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", "requires": { - "symbol-observable": "1.0.4" + "symbol-observable": "1.0.1" } }, "safe-buffer": { @@ -7136,9 +7136,9 @@ } }, "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" }, "tapable": { "version": "0.2.8", diff --git a/dmp-frontend/package.json b/dmp-frontend/package.json index 3ed9b91f0..7cb74abc8 100644 --- a/dmp-frontend/package.json +++ b/dmp-frontend/package.json @@ -27,7 +27,7 @@ "@ngx-translate/core": "^9.0.1", "@ngx-translate/http-loader": "^2.0.0", "core-js": "^2.4.1", - "rxjs": "^5.4.2", + "rxjs": "^5.5.6", "zone.js": "^0.8.17" }, "devDependencies": { diff --git a/dmp-frontend/src/app/models/criteria/users/UserCriteria.ts b/dmp-frontend/src/app/models/criteria/users/UserCriteria.ts index 910fd51c7..4769159dc 100644 --- a/dmp-frontend/src/app/models/criteria/users/UserCriteria.ts +++ b/dmp-frontend/src/app/models/criteria/users/UserCriteria.ts @@ -1,9 +1,9 @@ import { BaseCriteria } from '../BaseCriteria'; -import { Principal } from "@app/models/login/Principal"; +import { Principal } from '../../login/Principal'; export class UserCriteria extends BaseCriteria { - public Label: String; - public Roles: Principal.AppRole[]; + public label: String; + public appRoles: Principal.AppRole[]; } diff --git a/dmp-frontend/src/app/models/login/Principal.ts b/dmp-frontend/src/app/models/login/Principal.ts index 80aafb3da..3b58d651e 100644 --- a/dmp-frontend/src/app/models/login/Principal.ts +++ b/dmp-frontend/src/app/models/login/Principal.ts @@ -20,8 +20,8 @@ export class Principal implements Serializable { export namespace Principal { export enum AppRole { - Manager = 2, - Admin = 1, + Admin = 2, + Manager = 1, User = 0, } } diff --git a/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.html b/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.html index e958b648b..7d363fe99 100644 --- a/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.html +++ b/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.html @@ -5,14 +5,14 @@
{{getPrincipalAppRoleWithLanguage(role)}} diff --git a/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.ts b/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.ts index f9a0b685a..1b7c07b1d 100644 --- a/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.ts +++ b/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.ts @@ -40,8 +40,8 @@ export class UsersCriteriaComponent extends BaseCriteriaComponent implements OnI public fromJSONObject(item: any): UserCriteria { this.criteria = new UserCriteria(); - this.criteria.Label = item.Label; - this.criteria.Roles = item.Roles; + this.criteria.label = item.Label; + this.criteria.appRoles = item.appRoles; return this.criteria; } @@ -49,8 +49,8 @@ export class UsersCriteriaComponent extends BaseCriteriaComponent implements OnI const context: ValidationContext = this.createValidationContext(); return this.formBuilder.group({ - label: [this.criteria.Label, context.getValidation('label').validators], - roles: [this.criteria.Roles, context.getValidation('roles').validators], + like: [this.criteria.label, context.getValidation('label').validators], + appRoles: [this.criteria.appRoles, context.getValidation('appRoles').validators], }); } @@ -59,7 +59,7 @@ export class UsersCriteriaComponent extends BaseCriteriaComponent implements OnI const validationArray: Validation[] = new Array(); validationArray.push({ key: 'label' }); - validationArray.push({ key: 'roles' }); + validationArray.push({ key: 'appRoles' }); validationContext.validation = validationArray; return validationContext; diff --git a/dmp-frontend/src/app/shared/components/navigation/navigation.component.html b/dmp-frontend/src/app/shared/components/navigation/navigation.component.html index ddfe5a96b..74c0c39ba 100644 --- a/dmp-frontend/src/app/shared/components/navigation/navigation.component.html +++ b/dmp-frontend/src/app/shared/components/navigation/navigation.component.html @@ -4,6 +4,7 @@ +
diff --git a/dmp-frontend/src/assets/lang/en.json b/dmp-frontend/src/assets/lang/en.json index 732e498cd..4ec10f343 100644 --- a/dmp-frontend/src/assets/lang/en.json +++ b/dmp-frontend/src/assets/lang/en.json @@ -25,7 +25,9 @@ "TITLE": "Data Management Plans", "PROJECTS": "Projects", "DMPS": "Plans", - "DATASETS": "Datasets" + "DATASETS": "Datasets", + "USERS": "Users" + }, "PROJECT-LISTING": { "TITLE": "Projects",