From b57f6fb73cef3a8d2c6398ad7536845b4e3a57b2 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 3 Jul 2020 10:43:19 +0300 Subject: [PATCH] Recent Activity controller will require a custom DataTable Request --- .../controllers/DashBoardController.java | 5 +-- .../logic/managers/DashBoardManager.java | 28 +++++++++++----- .../RecentActivityTableRequest.java | 33 +++++++++++++++++++ .../services/dashboard/dashboard.service.ts | 5 +-- 4 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/tablerequest/RecentActivityTableRequest.java diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java index 65e7c3a09..0e3e7d936 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java @@ -6,6 +6,7 @@ import eu.eudat.logic.security.claims.ClaimedAuthorities; import eu.eudat.logic.services.ApiContext; import eu.eudat.models.data.dashboard.recent.RecentActivity; import eu.eudat.models.data.dashboard.recent.model.RecentActivityModel; +import eu.eudat.models.data.dashboard.recent.tablerequest.RecentActivityTableRequest; import eu.eudat.models.data.dashboard.searchbar.SearchBarItem; import eu.eudat.models.data.dashboard.statistics.DashBoardStatistics; import eu.eudat.models.data.helpers.responses.ResponseItem; @@ -47,9 +48,9 @@ public class DashBoardController extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/dashboard/recentActivity"}, produces = "application/json") @Transactional - public ResponseEntity>> getNewRecentActivity(@RequestBody RecentActivityCriteria criteria, @RequestParam(name = "numOfActivities", required = false, defaultValue = "5") Integer numberOfActivities, + public ResponseEntity>> getNewRecentActivity(@RequestBody RecentActivityTableRequest tableRequest, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) { - List statistics = dashBoardManager.getNewRecentActivity(criteria, principal, numberOfActivities); + List statistics = dashBoardManager.getNewRecentActivity(tableRequest, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(statistics)); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java index 4b190e65a..f45382bab 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java @@ -18,6 +18,7 @@ import eu.eudat.models.data.dashboard.recent.RecentActivityData; import eu.eudat.models.data.dashboard.recent.model.RecentActivityModel; import eu.eudat.models.data.dashboard.recent.model.RecentDatasetModel; import eu.eudat.models.data.dashboard.recent.model.RecentDmpModel; +import eu.eudat.models.data.dashboard.recent.tablerequest.RecentActivityTableRequest; import eu.eudat.models.data.dashboard.searchbar.SearchBarItem; import eu.eudat.models.data.dashboard.statistics.DashBoardStatistics; import eu.eudat.models.data.listingmodels.DataManagementPlanListingModel; @@ -35,11 +36,19 @@ import java.io.IOException; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import java.util.stream.Stream; @Component public class DashBoardManager { private static final Logger logger = LoggerFactory.getLogger(DashBoardManager.class); + private final Map> comparators = Stream.of(new Object[][] { + { "modified", Comparator.comparing(o -> ((RecentActivityModel)o).getModified())}, + { "created", Comparator.comparing(o -> ((RecentActivityModel)o).getCreated())}, + { "label", Comparator.comparing(o -> ((RecentActivityModel)o).getTitle())}, + { "status", Comparator.comparing(o -> ((RecentActivityModel)o).getStatus())} + }).collect(Collectors.toMap(data -> (String) data[0], data -> (Comparator)data[1])); + private ApiContext apiContext; private DatabaseRepository databaseRepository; @@ -183,18 +192,18 @@ public class DashBoardManager { } @Transactional - public List getNewRecentActivity(RecentActivityCriteria criteria, Principal principal, Integer numberofactivities) { + public List getNewRecentActivity(RecentActivityTableRequest tableRequest, Principal principal) { List recentActivityModels = new ArrayList<>(); DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao(); DatasetDao datasetRepository = databaseRepository.getDatasetDao(); UserInfo user = new UserInfo(); user.setId(principal.getId()); DatasetCriteria datasetCriteria = new DatasetCriteria(); - datasetCriteria.setLike(criteria.getLike()); + datasetCriteria.setLike(tableRequest.getCriteria().getLike()); datasetCriteria.setAllVersions(false); DataManagementPlanCriteria dataManagementPlanCriteria = new DataManagementPlanCriteria(); dataManagementPlanCriteria.setAllVersions(false); - dataManagementPlanCriteria.setLike(criteria.getLike()); + dataManagementPlanCriteria.setLike(tableRequest.getCriteria().getLike()); QueryableList dmpList; QueryableList datasetList; @@ -213,8 +222,9 @@ public class DashBoardManager { CompletableFuture> dmps = dmpList .withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class)) - .orderBy((builder, root) -> builder.desc(root.get(criteria.getOrder()))) - .take(numberofactivities) + .orderBy((builder, root) -> builder.desc(root.get(tableRequest.getCriteria().getOrder()))) + .skip(tableRequest.getOffset()) + .take(tableRequest.getSize()) .selectAsync(item -> { return new RecentDmpModel().fromEntity(item); }) @@ -222,15 +232,17 @@ public class DashBoardManager { CompletableFuture> datasets = datasetList .withHint(HintedModelFactory.getHint(DatasetListingModel.class)) - .orderBy((builder, root) -> builder.desc(root.get(criteria.getOrder()))) - .take(numberofactivities) + .orderBy((builder, root) -> builder.desc(root.get(tableRequest.getCriteria().getOrder()))) + .skip(tableRequest.getOffset()) + .take(tableRequest.getSize()) .selectAsync(item -> { return new RecentDatasetModel().fromEntity(item); }) .whenComplete((datasetActivities, throwable) -> recentActivityModels.addAll(datasetActivities)); CompletableFuture.allOf(dmps, datasets).join(); - return recentActivityModels.stream().sorted(Comparator.comparing(RecentActivityModel::getModified)).collect(Collectors.toList()); + + return recentActivityModels.stream().sorted(this.comparators.get(tableRequest.getCriteria().getOrder())).collect(Collectors.toList()); } public List searchUserData(String like, Principal principal) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/tablerequest/RecentActivityTableRequest.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/tablerequest/RecentActivityTableRequest.java new file mode 100644 index 000000000..bf6678e9e --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/tablerequest/RecentActivityTableRequest.java @@ -0,0 +1,33 @@ +package eu.eudat.models.data.dashboard.recent.tablerequest; + +import eu.eudat.criteria.RecentActivityCriteria; + +public class RecentActivityTableRequest { + private RecentActivityCriteria criteria; + private int offset; + private int size; + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public RecentActivityCriteria getCriteria() { + return criteria; + } + + public void setCriteria(RecentActivityCriteria criteria) { + this.criteria = criteria; + } +} diff --git a/dmp-frontend/src/app/core/services/dashboard/dashboard.service.ts b/dmp-frontend/src/app/core/services/dashboard/dashboard.service.ts index a10a33131..93377f52b 100644 --- a/dmp-frontend/src/app/core/services/dashboard/dashboard.service.ts +++ b/dmp-frontend/src/app/core/services/dashboard/dashboard.service.ts @@ -7,6 +7,7 @@ import { BaseHttpService } from '../http/base-http.service'; import { ConfigurationService } from '../configuration/configuration.service'; import { RecentActivityModel } from '@app/core/model/recent-activity/recent-activity.model'; import { RecentActivityCriteria } from '@app/core/query/recent-activity/recent-activity-criteria'; +import { DataTableRequest } from '@app/core/model/data-table/data-table-request'; @Injectable() export class DashboardService { @@ -27,7 +28,7 @@ export class DashboardService { return this.http.get(this.actionUrl + 'me/getStatistics', { headers: this.headers }); } - getRecentAcitvity(criteria: RecentActivityCriteria): Observable { - return this.http.post(this.actionUrl + 'recentActivity', criteria, {headers: this.headers}); + getRecentAcitvity(request: DataTableRequest): Observable { + return this.http.post(this.actionUrl + 'recentActivity', request, {headers: this.headers}); } }