From e829c5e6f0924fd1335b04cc4b19500152aef35a Mon Sep 17 00:00:00 2001 From: dtziotzios Date: Thu, 31 Jan 2019 15:56:53 +0200 Subject: [PATCH] Parameterizes DMPs query endpoint for more efficient listing --- .../main/java/eu/eudat/controllers/DMPs.java | 4 +-- .../managers/DataManagementPlanManager.java | 33 ++++++++++++------- .../DataManagementPlanListingModel.java | 18 ++++++---- .../src/app/core/services/dmp/dmp.service.ts | 10 ++++-- .../dataset-wizard.component.ts | 2 +- .../ui/dmp/listing/dmp-listing.component.ts | 2 +- 6 files changed, 45 insertions(+), 24 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java index 166c31262..0e2131885 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java @@ -66,8 +66,8 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/paged"}, consumes = "application/json", produces = "application/json") public @ResponseBody - ResponseEntity>> getPaged(@Valid @RequestBody DataManagementPlanTableRequest dataManagementPlanTableRequest, Principal principal) throws Exception { - DataTableData dataTable = this.dataManagementPlanManager.getPaged(this.getApiContext(), dataManagementPlanTableRequest, principal); + ResponseEntity>> getPaged(@Valid @RequestBody DataManagementPlanTableRequest dataManagementPlanTableRequest,@RequestParam String fieldsGroup, Principal principal) throws Exception { + DataTableData dataTable = this.dataManagementPlanManager.getPaged(this.getApiContext(), dataManagementPlanTableRequest, principal, fieldsGroup); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(dataTable)); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index b884e5289..edadc455a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -52,7 +52,7 @@ import java.util.stream.Collectors; @Component public class DataManagementPlanManager { - public DataTableData getPaged(ApiContext apiContext, DataManagementPlanTableRequest dataManagementPlanTableRequest, Principal principal) throws Exception { + public DataTableData getPaged(ApiContext apiContext, DataManagementPlanTableRequest dataManagementPlanTableRequest, Principal principal, String fieldsGroup) throws Exception { UserInfo userInfo = new UserInfo(); userInfo.setId(principal.getId()); QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(dataManagementPlanTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class)); @@ -61,17 +61,26 @@ public class DataManagementPlanManager { DataTableData dataTable = new DataTableData<>(); - CompletableFuture itemsFuture = pagedItems.withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class)) - .selectAsync(item -> { - item.setDataset( - item.getDataset().stream() - .filter(dataset -> dataset.getDmp().getCreator().getId().equals(userInfo.getId()) - || dataset.isPublic() - || dataset.getDmp().getUsers().stream() - .filter(x -> x.getId().equals(userInfo.getId())).collect(Collectors.toList()).size() > 0).collect(Collectors.toSet())); - return new DataManagementPlanListingModel().fromDataModel(item); - }) - .whenComplete((resultList, throwable) -> dataTable.setData(resultList)); + CompletableFuture itemsFuture; + if(fieldsGroup.equals("listing")){ + + itemsFuture = pagedItems.withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class)) + .selectAsync(item -> { + item.setDataset( + item.getDataset().stream() + .filter(dataset -> dataset.getDmp().getCreator().getId().equals(userInfo.getId()) + || dataset.isPublic() + || dataset.getDmp().getUsers().stream() + .filter(x -> x.getId().equals(userInfo.getId())).collect(Collectors.toList()).size() > 0).collect(Collectors.toSet())); + return new DataManagementPlanListingModel().fromDataModelDatasets(item); + }) + .whenComplete((resultList, throwable) -> dataTable.setData(resultList)); + } + else{ + itemsFuture = pagedItems + .selectAsync(item -> new DataManagementPlanListingModel().fromDataModel(item) ) + .whenComplete((resultList, throwable) -> dataTable.setData(resultList)); + } CompletableFuture countFuture = authItems.countAsync().whenComplete((count, throwable) -> { dataTable.setTotalCount(count); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java index 267b467e8..27dd505a2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java @@ -108,17 +108,23 @@ public class DataManagementPlanListingModel implements DataModel new Organisation().fromDataModel(item)).collect(Collectors.toList())); - this.creationTime = entity.getCreated(); - this.version = entity.getVersion(); this.groupId = entity.getGroupId(); + return this; + } + + public DataManagementPlanListingModel fromDataModelDatasets(DMP entity) { + this.fromDataModel(entity); + this.status = entity.getStatus(); + this.version = entity.getVersion(); + this.project = entity.getProject().getLabel(); + if (entity.getProfile() != null) this.profile = entity.getProfile().getLabel(); + this.creationTime = entity.getCreated(); + this.organisations = LabelBuilder.getLabel(entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList())); this.datasets = entity.getDataset().stream().map(x-> new DatasetUrlListing().fromDataModel(x)).collect(Collectors.toList()); return this; } + @Override public DMP toDataModel() { return null; diff --git a/dmp-frontend/src/app/core/services/dmp/dmp.service.ts b/dmp-frontend/src/app/core/services/dmp/dmp.service.ts index 47714e971..b08861e80 100644 --- a/dmp-frontend/src/app/core/services/dmp/dmp.service.ts +++ b/dmp-frontend/src/app/core/services/dmp/dmp.service.ts @@ -23,8 +23,14 @@ export class DmpService { this.actionUrl = environment.Server + 'dmps/'; } - getPaged(dataTableRequest: DataTableRequest): Observable> { - return this.http.post>(this.actionUrl + 'paged', dataTableRequest, { headers: this.headers }); + getPaged(dataTableRequest: DataTableRequest, fieldsGroup?: string): Observable> { + if (fieldsGroup) { + return this.http.post>(this.actionUrl + 'paged?fieldsGroup=' + fieldsGroup, dataTableRequest, { headers: this.headers }); + } + else { + return this.http.post>(this.actionUrl + 'paged?fieldsGroup=' + fieldsGroup, dataTableRequest, { headers: this.headers }); + } + } getSingle(id: String): Observable { diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts index a583480ca..0fb579b96 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts @@ -218,7 +218,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr const dmpDataTableRequest: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); dmpDataTableRequest.criteria = new DmpCriteria(); dmpDataTableRequest.criteria.like = query; - return this.dmpService.getPaged(dmpDataTableRequest).map(x => x.data); + return this.dmpService.getPaged(dmpDataTableRequest, "autocomplete").map(x => x.data); } loadDatasetProfiles() { diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index d9761d989..223b55850 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -156,7 +156,7 @@ export class DmpDataSource extends DataSource { request.criteria.groupIds = [this.itemId]; request.criteria.allVersions = true; } - return this._service.getPaged(request); + return this._service.getPaged(request, "listing"); }) /*.catch((error: any) => { this._snackBar.openFromComponent(SnackBarNotificationComponent, {