diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java index 50a54ebe3..b8a510037 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java @@ -20,6 +20,7 @@ public class DatasetCriteria extends Criteria { private Integer role; private List projects; private List collaborators; + private List datasetTemplates; public boolean getAllVersions() { return allVersions; @@ -97,4 +98,11 @@ public class DatasetCriteria extends Criteria { public void setCollaborators(List collaborators) { this.collaborators = collaborators; } + + public List getDatasetTemplates() { + return datasetTemplates; + } + public void setDatasetTemplates(List datasetTemplates) { + this.datasetTemplates = datasetTemplates; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index 460dccbcc..bdb48b4ee 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -43,18 +43,16 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("dmp").get("version"), query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("dmp").get("groupId"), nestedRoot.get("dmp").get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class))); if (criteria.getDmpIds() != null && !criteria.getDmpIds().isEmpty()) query.where((builder, root) -> root.get("dmp").get("id").in(criteria.getDmpIds())); - if (criteria.getRole() != null) { + if (criteria.getRole() != null) query.where((builder, root) -> builder.equal(root.join("dmp").join("users").get("role"), criteria.getRole())); - } - if (criteria.getOrganisations() != null && !criteria.getOrganisations().isEmpty()) { + if (criteria.getOrganisations() != null && !criteria.getOrganisations().isEmpty()) query.where((builder, root) -> root.join("dmp").join("organisations").get("reference").in(criteria.getOrganisations())); - } - if (criteria.getProjects() != null && !criteria.getProjects().isEmpty()) { + if (criteria.getProjects() != null && !criteria.getProjects().isEmpty()) query.where((builder, root) -> root.join("dmp").join("project").get("id").in(criteria.getProjects())); - } - if (criteria.getCollaborators() != null && !criteria.getCollaborators().isEmpty()) { + if (criteria.getCollaborators() != null && !criteria.getCollaborators().isEmpty()) query.where((builder, root) -> root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators())); - } + if (criteria.getDatasetTemplates() != null && !criteria.getDatasetTemplates().isEmpty()) + query.where(((builder, root) -> root.get("profile").get("id").in(criteria.getDatasetTemplates()))); query.where(((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.DELETED.getValue()))); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java index 587de4015..42a7f8082 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java @@ -44,6 +44,13 @@ public class DatasetProfileDaoImpl extends DatabaseAccess implem builder.notEqual(root.get("id"), criteria.getUserId()))); //query.where(((builder, root) -> builder.equal(root.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), criteria.getUserId()))); } + if (criteria.getFilter().equals(DatasetProfileCriteria.DatasetProfileFilter.Datasets.getValue())) { + query.initSubQuery(UUID.class).where((builder, root) -> + builder.and(root.get("id").in( + query.subQuery((builder1, root1) -> builder1.equal(root1.join("dataset", JoinType.LEFT).join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), criteria.getUserId()), + Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id")))), + builder.notEqual(root.get("id"), criteria.getUserId()))); + } } query.where(((builder, root) -> builder.notEqual(root.get("status"), DatasetProfile.Status.DELETED.getValue()))); return query; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java index 5b49595b0..02d56eca6 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java @@ -3,9 +3,11 @@ package eu.eudat.controllers; import eu.eudat.data.entities.Dataset; import eu.eudat.data.query.items.table.dataset.DatasetPublicTableRequest; import eu.eudat.data.query.items.table.dataset.DatasetTableRequest; +import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.logic.managers.DatasetManager; import eu.eudat.logic.security.claims.ClaimedAuthorities; import eu.eudat.logic.services.ApiContext; +import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.listingmodels.DatasetListingModel; @@ -57,5 +59,11 @@ public class Datasets extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message(this.getApiContext().getHelpersService().getMessageSource().getMessage("dataset.public", new Object[]{}, locale))); } + @RequestMapping(method = RequestMethod.POST, value = {"/datasetProfilesUsedByDatasets/paged"}, produces = "application/json") + public @ResponseBody + ResponseEntity>> getUsingDatasetProfilesPaged(@RequestBody DatasetProfileTableRequestItem datasetProfileTableRequestItem, Principal principal) { + DataTableData datasetProfileTableData = this.datasetManager.getDatasetProfilesUsedByDatasets(datasetProfileTableRequestItem, principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 535d5cade..b6f522f84 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -7,6 +7,7 @@ import eu.eudat.data.dao.entities.RegistryDao; import eu.eudat.data.entities.*; import eu.eudat.data.query.items.table.dataset.DatasetPublicTableRequest; import eu.eudat.data.query.items.table.dataset.DatasetTableRequest; +import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.elastic.criteria.DatasetCriteria; import eu.eudat.elastic.repository.DatasetRepository; import eu.eudat.logic.builders.BuilderFactory; @@ -21,6 +22,7 @@ import eu.eudat.logic.utilities.documents.xml.ExportXmlBuilder; import eu.eudat.models.HintedModelFactory; import eu.eudat.models.data.datasetImport.DatasetImportField; import eu.eudat.models.data.datasetImport.DatasetImportPagedDatasetProfile; +import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dmp.AssociatedProfile; import eu.eudat.models.data.helpers.common.DataTableData; @@ -568,4 +570,18 @@ public class DatasetManager { pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile); return pagedDatasetProfile; } + + public DataTableData getDatasetProfilesUsedByDatasets(DatasetProfileTableRequestItem datasetProfileTableRequestItem, Principal principal) { + datasetProfileTableRequestItem.getCriteria().setFilter(DatasetProfileCriteria.DatasetProfileFilter.Datasets.getValue()); + datasetProfileTableRequestItem.getCriteria().setUserId(principal.getId()); + + QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().getWithCriteria(datasetProfileTableRequestItem.getCriteria()); + List listingModels = items.select(item -> new DatasetProfileListingModel().fromDataModel(item)); + + DataTableData data = new DataTableData<>(); + data.setData(listingModels); + data.setTotalCount((long) listingModels.size()); + + return data; + } } diff --git a/dmp-frontend/src/app/core/query/dataset/dataset-criteria.ts b/dmp-frontend/src/app/core/query/dataset/dataset-criteria.ts index 1367e1bb9..4893b34a9 100644 --- a/dmp-frontend/src/app/core/query/dataset/dataset-criteria.ts +++ b/dmp-frontend/src/app/core/query/dataset/dataset-criteria.ts @@ -10,4 +10,5 @@ export class DatasetCriteria extends BaseCriteria { public role?: number; public organisations?: string[] = []; public collaborators?: string[] = []; + public datasetTemplates?: string[] = []; } diff --git a/dmp-frontend/src/app/core/services/dataset/dataset.service.ts b/dmp-frontend/src/app/core/services/dataset/dataset.service.ts index 5b5433079..920b644ba 100644 --- a/dmp-frontend/src/app/core/services/dataset/dataset.service.ts +++ b/dmp-frontend/src/app/core/services/dataset/dataset.service.ts @@ -8,6 +8,7 @@ import { DatasetProfileModel } from '../../model/dataset/dataset-profile'; import { DatasetCriteria } from '../../query/dataset/dataset-criteria'; import { ExploreDatasetCriteriaModel } from '../../query/explore-dataset/explore-dataset-criteria'; import { BaseHttpService } from '../http/base-http.service'; +import { DatasetProfileCriteria } from '../../query/dataset-profile/dataset-profile-criteria'; @Injectable() export class DatasetService { @@ -33,4 +34,8 @@ export class DatasetService { getDatasetProfiles(): Observable { return this.http.get(environment.Server + 'datasetprofiles/getAll'); } + + getDatasetProfilesUsedPaged(dataTableRequest: DataTableRequest) { + return this.http.post>(this.actionUrl + 'datasetProfilesUsedByDatasets/paged', dataTableRequest); + } } diff --git a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html index 46f12eaf2..44285c893 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html +++ b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.html @@ -23,6 +23,19 @@ + +
+
{{'CRITERIA.DATA-SETS.RELATED-DATASET-TEMPLATES' | translate}}
+ + + + arrow_drop_down + +
+ +
{{'CRITERIA.DATA-SETS.RELATED-DMP' | translate}}
diff --git a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts index 2f1013bf2..bafec33bd 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/criteria/dataset-criteria.component.ts @@ -32,6 +32,8 @@ import { ProjectCriteria } from '../../../../core/query/project/project-criteria import { ProjectService } from '../../../../core/services/project/project.service'; import { UserCriteria } from '../../../../core/query/user/user-criteria'; import { UserService } from '../../../../core/services/user/user.service'; +import { DatasetProfileCriteria } from '../../../../core/query/dataset-profile/dataset-profile-criteria'; +import { DatasetService } from '../../../../core/services/dataset/dataset.service'; @Component({ selector: 'app-dataset-criteria-component', @@ -56,6 +58,7 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O role: new FormControl(), organisations: new FormControl(), collaborators: new FormControl(), + datasetTemplates: new FormControl(), tags: new FormControl() }); @@ -66,6 +69,13 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O titleFn: (item) => item['name'] }; + datasetTemplateAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { + filterFn: this.filterDatasetTemplate.bind(this), + initialItems: (excludedItems: any[]) => this.filterDatasetTemplate('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), + displayFn: (item) => item['label'], + titleFn: (item) => item['label'] + }; + dmpAutoCompleteConfiguration = { filterFn: (x, excluded) => this.filterDmps(x).map(x => x.data), initialItems: (extraData) => this.filterDmps('').map(x => x.data), @@ -107,6 +117,7 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O public projectService: ProjectService, private organisationService: OrganisationService, private userService: UserService, + private datasetService: DatasetService, fb: FormBuilder ) { super(new ValidationErrorModel()); @@ -139,7 +150,9 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O this.formGroup.get('collaborators').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(x => this.controlModified()); - + this.formGroup.get('datasetTemplates').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); // if (this.criteria == null) { this.criteria = {}; } } @@ -150,6 +163,7 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O this.formGroup.get('status').patchValue(criteria.status); this.formGroup.get('role').patchValue(criteria.role); this.formGroup.get('collaborators').patchValue(criteria.collaborators); + this.formGroup.get('datasetTemplates').patchValue(criteria.datasetTemplates); // this.criteria = criteria; } @@ -178,6 +192,15 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O return this.externalSourcesService.searchDatasetTags(requestItem); } + filterDatasetTemplate(query: string) { + const fields: Array = new Array(); + fields.push('asc'); + const datasetTemplateRequestItem: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + datasetTemplateRequestItem.criteria = new DatasetProfileCriteria(); + datasetTemplateRequestItem.criteria.like = query; + return this.datasetService.getDatasetProfilesUsedPaged(datasetTemplateRequestItem).map(x => x.data); + } + filterDmps(value: string): Observable> { const fields: Array = new Array(); fields.push('asc'); diff --git a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts index 31706b52d..b763d19a1 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts @@ -115,6 +115,9 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB if (value.organisations) { request.criteria.organisations = value.organisations.map(x => x.id); } + if (value.datasetTemplates) { + request.criteria.datasetTemplates = value.datasetTemplates.map(x => x.id) + } // if (this.itemId) { // // request.criteria.groupIds = [this.itemId]; // request.criteria.allVersions = true; diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index 47d0a8f95..fd4b591b3 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -547,7 +547,9 @@ "SELECT-DMP": "Select DMP", "RELATED-DMP": "Related DMPs", "SELECT-COLLABORATORS": "Select Collaborators", - "RELATED-COLLABORATORS": "Related Collaborators" + "RELATED-COLLABORATORS": "Related Collaborators", + "SELECT-DATASET-TEMPLATES": "Select Dataset Templates", + "RELATED-DATASET-TEMPLATES": "Related Dataset Templates" }, "DMP": { "LIKE": "Search DMPs",