argos/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java

165 lines
10 KiB
Java
Raw Normal View History

2018-06-27 12:29:21 +02:00
package eu.eudat.logic.managers;
2017-12-14 18:07:09 +01:00
2018-08-24 17:21:02 +02:00
import eu.eudat.data.dao.criteria.DataManagementPlanCriteria;
import eu.eudat.data.dao.criteria.DatasetCriteria;
import eu.eudat.data.dao.criteria.OrganisationCriteria;
2019-03-15 17:06:55 +01:00
import eu.eudat.data.dao.criteria.ProjectCriteria;
2018-03-21 11:57:56 +01:00
import eu.eudat.data.dao.entities.DMPDao;
import eu.eudat.data.dao.entities.DatasetDao;
import eu.eudat.data.dao.entities.OrganisationDao;
2018-03-21 11:57:56 +01:00
import eu.eudat.data.dao.entities.ProjectDao;
import eu.eudat.data.entities.UserInfo;
2018-08-24 17:21:02 +02:00
import eu.eudat.logic.builders.model.models.RecentActivityDataBuilder;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.logic.services.operations.DatabaseRepository;
2018-06-27 12:29:21 +02:00
import eu.eudat.models.data.dashboard.recent.RecentActivity;
import eu.eudat.models.data.dashboard.recent.RecentActivityData;
2018-08-24 17:21:02 +02:00
import eu.eudat.models.data.dashboard.searchbar.SearchBarItem;
2018-06-27 12:29:21 +02:00
import eu.eudat.models.data.dashboard.statistics.DashBoardStatistics;
import eu.eudat.models.data.security.Principal;
2018-08-24 17:21:02 +02:00
import eu.eudat.types.searchbar.SearchBarItemType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
2018-03-19 13:40:04 +01:00
2018-08-24 17:21:02 +02:00
import java.util.LinkedList;
2018-03-19 13:40:04 +01:00
import java.util.List;
import java.util.concurrent.CompletableFuture;
2018-02-02 11:33:37 +01:00
@Component
2017-12-14 18:07:09 +01:00
public class DashBoardManager {
2018-02-02 11:33:37 +01:00
private ApiContext apiContext;
private DatabaseRepository databaseRepository;
@Autowired
public DashBoardManager(ApiContext apiContext) {
this.apiContext = apiContext;
this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository();
}
public DashBoardStatistics getStatistics() {
2018-02-02 11:33:37 +01:00
DashBoardStatistics statistics = new DashBoardStatistics();
2018-03-19 13:40:04 +01:00
DatasetCriteria datasetCriteria = new DatasetCriteria();
DataManagementPlanCriteria dataManagementPlanCriteria = new DataManagementPlanCriteria();
OrganisationCriteria organisationCriteria = new OrganisationCriteria();
datasetCriteria.setAllVersions(false);
2018-03-19 13:40:04 +01:00
dataManagementPlanCriteria.setAllVersions(false);
organisationCriteria.setPublic(false);
2018-03-19 13:40:04 +01:00
CompletableFuture dmpFuture = databaseRepository.getDmpDao().getWithCriteria(dataManagementPlanCriteria).countAsync()
2018-03-19 13:40:04 +01:00
.whenComplete((dmpsStats, throwable) -> statistics.setTotalDataManagementPlanCount(dmpsStats));
CompletableFuture datasetFuture = databaseRepository.getDatasetDao().getWithCriteria(datasetCriteria).countAsync()
2018-03-19 13:40:04 +01:00
.whenComplete((datasetsStats, throwable) -> statistics.setTotalDataSetCount(datasetsStats));
CompletableFuture projectFuture = databaseRepository.getProjectDao().asQueryable().countAsync()
2018-03-19 13:40:04 +01:00
.whenComplete((projectsStats, throwable) -> statistics.setTotalProjectCount(projectsStats));
CompletableFuture organisationFuture = databaseRepository.getOrganisationDao().getWithCriteria(organisationCriteria).countAsync()
.whenComplete((organisationStats, throwable) -> statistics.setTotalOrganisationCount(organisationStats));
2018-03-19 13:40:04 +01:00
CompletableFuture.allOf(dmpFuture, datasetFuture, projectFuture, organisationFuture).join();
2018-02-02 11:33:37 +01:00
return statistics;
}
public DashBoardStatistics getMeStatistics(Principal principal) {
2018-02-02 11:33:37 +01:00
DashBoardStatistics statistics = new DashBoardStatistics();
DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao();
DatasetDao datasetRepository = databaseRepository.getDatasetDao();
ProjectDao projectRepository = databaseRepository.getProjectDao();
OrganisationDao organisationRepository = databaseRepository.getOrganisationDao();
2018-02-02 11:33:37 +01:00
UserInfo user = new UserInfo();
user.setId(principal.getId());
2018-03-19 13:40:04 +01:00
DatasetCriteria datasetCriteria = new DatasetCriteria();
datasetCriteria.setAllVersions(false);
DataManagementPlanCriteria dataManagementPlanCriteria = new DataManagementPlanCriteria();
dataManagementPlanCriteria.setAllVersions(false);
2019-03-15 17:06:55 +01:00
ProjectCriteria projectCriteria = new ProjectCriteria();
OrganisationCriteria organisationCriteria = new OrganisationCriteria();
2019-03-15 17:06:55 +01:00
CompletableFuture dmpFuture = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId()).countAsync()
2018-03-19 13:40:04 +01:00
.whenComplete((dmpsStats, throwable) -> statistics.setTotalDataManagementPlanCount(dmpsStats));
CompletableFuture datasetFuture = datasetRepository.getAuthenticated(datasetRepository.getWithCriteria(datasetCriteria), user).countAsync()
.whenComplete((datasetsStats, throwable) -> statistics.setTotalDataSetCount(datasetsStats));
2019-03-15 17:06:55 +01:00
CompletableFuture projectFuture = projectRepository.getAuthenticated(projectRepository.getWithCriteria(projectCriteria), user).countAsync()
2018-03-19 13:40:04 +01:00
.whenComplete((projectsStats, throwable) -> statistics.setTotalProjectCount(projectsStats));
CompletableFuture orgnanisationFuture = organisationRepository.getAuthenticated(organisationRepository.asQueryable().withHint("organisationRecentActivity"), user).countAsync()
.whenComplete((organisationStats, throwable) -> statistics.setTotalOrganisationCount(organisationStats));
2018-03-19 13:40:04 +01:00
CompletableFuture.allOf(dmpFuture, datasetFuture, projectFuture, orgnanisationFuture).join();
2018-02-02 11:33:37 +01:00
return statistics;
}
2017-12-14 18:07:09 +01:00
public RecentActivity getRecentActivity(Principal principal, Integer numberofactivities) {
2018-03-19 13:40:04 +01:00
RecentActivity activity = new RecentActivity();
DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao();
DatasetDao datasetRepository = databaseRepository.getDatasetDao();
ProjectDao projectRepository = databaseRepository.getProjectDao();
2018-03-19 13:40:04 +01:00
UserInfo user = new UserInfo();
user.setId(principal.getId());
2018-08-27 17:09:33 +02:00
DatasetCriteria datasetCriteria = new DatasetCriteria();
datasetCriteria.setAllVersions(false);
DataManagementPlanCriteria dataManagementPlanCriteria = new DataManagementPlanCriteria();
dataManagementPlanCriteria.setAllVersions(false);
2019-03-15 17:06:55 +01:00
ProjectCriteria projectCriteria = new ProjectCriteria();
2018-03-19 13:40:04 +01:00
RecentActivityDataBuilder recentActivityDataBuilder = apiContext.getOperationsContext().getBuilderFactory().getBuilder(RecentActivityDataBuilder.class);
CompletableFuture<List<RecentActivityData>> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId())
2018-03-19 13:40:04 +01:00
.withHint("dmpRecentActivity")
.orderBy((builder, root) -> builder.desc(root.get("modified")))
.take(numberofactivities)
2018-05-28 11:50:42 +02:00
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
.whenComplete((dmpActivities, throwable) -> activity.setRecentDmpActivities(dmpActivities));
2018-03-19 13:40:04 +01:00
2018-08-27 17:09:33 +02:00
CompletableFuture<List<RecentActivityData>> datasets = datasetRepository.getAuthenticated(datasetRepository.getWithCriteria(datasetCriteria), user)
2018-03-19 13:40:04 +01:00
.withHint("datasetRecentActivity")
.orderBy((builder, root) -> builder.desc(root.get("modified")))
.take(numberofactivities)
2018-05-28 11:50:42 +02:00
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
.whenComplete((datasetActivities, throwable) -> activity.setRecentDatasetActivities(datasetActivities));
2018-03-19 13:40:04 +01:00
2019-03-15 17:06:55 +01:00
CompletableFuture<List<RecentActivityData>> projects = projectRepository.getAuthenticated(projectRepository.getWithCriteria(projectCriteria), user)
2018-03-19 13:40:04 +01:00
.withHint("projectRecentActivity")
.orderBy((builder, root) -> builder.desc(root.get("modified")))
.take(numberofactivities)
2018-05-28 11:50:42 +02:00
.selectAsync(item -> recentActivityDataBuilder.label(item.getLabel()).timestamp(item.getModified()).id(item.getId().toString()).build())
.whenComplete((projectActivities, throwable) -> activity.setRecentProjectActivities(projectActivities));
2018-03-19 13:40:04 +01:00
CompletableFuture.allOf(projects, dmps, datasets).join();
return activity;
}
public List<SearchBarItem> searchUserData(String like, Principal principal) {
2018-08-24 17:21:02 +02:00
RecentActivity activity = new RecentActivity();
UserInfo user = new UserInfo();
user.setId(principal.getId());
DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao();
DatasetDao datasetRepository = databaseRepository.getDatasetDao();
ProjectDao projectRepository = databaseRepository.getProjectDao();
2018-08-24 17:21:02 +02:00
List<SearchBarItem> searchBarItems = new LinkedList<>();
CompletableFuture<List<SearchBarItem>> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.asQueryable(), principal.getId())
2018-08-24 17:21:02 +02:00
.withHint("dmpRecentActivity")
2018-09-18 14:41:24 +02:00
.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + like.toUpperCase() + "%"))
2018-08-24 17:21:02 +02:00
.orderBy((builder, root) -> builder.desc(root.get("modified")))
.selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.DMP.getValue()))
.whenComplete((dmpItems, throwable) -> searchBarItems.addAll(dmpItems));
CompletableFuture<List<SearchBarItem>> datasets = datasetRepository.getAuthenticated(datasetRepository.asQueryable(), user)
.withHint("datasetRecentActivity")
2018-09-18 14:41:24 +02:00
.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + like.toUpperCase() + "%"))
2018-08-24 17:21:02 +02:00
.orderBy((builder, root) -> builder.desc(root.get("modified")))
.selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.DATASET.getValue()))
.whenComplete((dataSetItems, throwable) -> searchBarItems.addAll(dataSetItems));
CompletableFuture<List<SearchBarItem>> projects = projectRepository.getAuthenticated(projectRepository.asQueryable(), user)
.withHint("projectRecentActivity")
2018-09-18 14:41:24 +02:00
.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + like.toUpperCase() + "%"))
2018-08-24 17:21:02 +02:00
.orderBy((builder, root) -> builder.desc(root.get("modified")))
.selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.PROJECT.getValue()))
.whenComplete((projectItems, throwable) -> searchBarItems.addAll(projectItems));
CompletableFuture.allOf(projects, dmps, datasets).join();
return searchBarItems;
}
2017-12-14 18:07:09 +01:00
}