From 6a52950e1ddcd6c276a7c5f81a61cbc3eff0fffe Mon Sep 17 00:00:00 2001 From: Ioannis Kalyvas Date: Mon, 15 Oct 2018 13:17:54 +0300 Subject: [PATCH] Changed Published dataset descriptions page to include Datatable Criteria in Facet Search Component --- .../dao/criteria/DatasetPublicCriteria.java | 10 ++ .../eudat/logic/managers/DatasetManager.java | 14 +- .../dataset-public-listing.component.html | 130 +++++++++--------- .../dataset-public-listing.component.ts | 13 +- .../app/dmps/editor/dmp-editor.component.html | 6 +- .../app/dmps/editor/dmp-editor.component.ts | 1 + .../facet-search/FacetSearchCriteriaModel.ts | 5 +- .../datasets/datasets-criteria.component.html | 25 +--- .../datasets/datasets-criteria.component.ts | 4 - .../facets/facet-search.component.html | 28 ++++ .../facets/facet-search.component.ts | 31 ++++- 11 files changed, 156 insertions(+), 111 deletions(-) diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetPublicCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetPublicCriteria.java index af745e465..d78041eba 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetPublicCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetPublicCriteria.java @@ -1,6 +1,7 @@ package eu.eudat.data.dao.criteria; import eu.eudat.data.entities.Dataset; +import eu.eudat.elastic.entities.Tag; import eu.eudat.types.project.ProjectStateType; import java.util.List; @@ -14,6 +15,7 @@ public class DatasetPublicCriteria extends Criteria{ public List projects; public List datasetProfile; public List dmpOrganisations; + public List tags; public ProjectStateType getProjectStatus() { return projectStatus; @@ -46,4 +48,12 @@ public class DatasetPublicCriteria extends Criteria{ public void setDmpOrganisations(List dmpOrganisations) { this.dmpOrganisations = dmpOrganisations; } + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } } 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 6566764a1..4c0524142 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 @@ -78,8 +78,20 @@ public class DatasetManager { } public DataTableData getPaged(ApiContext apiContext, DatasetPublicTableRequest datasetTableRequest, Principal principal) throws Exception { + DatasetCriteria datasetCriteria = new DatasetCriteria(); + datasetCriteria.setTags(datasetTableRequest.getCriteria().getTags()); + List datasets = apiContext.getOperationsContext().getDatasetRepository().exists() ? + apiContext.getOperationsContext().getDatasetRepository().query(datasetCriteria) : new LinkedList<>(); + datasetTableRequest.setQuery(apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class))); - QueryableList pagedItems = PaginationManager.applyPaging(datasetTableRequest.applyCriteria(), datasetTableRequest); + QueryableList items = datasetTableRequest.applyCriteria(); + if (datasetTableRequest.getCriteria().getTags() != null && !datasetTableRequest.getCriteria().getTags().isEmpty()) { + if (!datasets.isEmpty()) + items.where((builder, root) -> root.get("id").in(datasets.stream().map(x -> UUID.fromString(x.getId())).collect(Collectors.toList()))); + else + items.where((builder, root) -> root.get("id").in(new UUID[]{UUID.randomUUID()})); + } + QueryableList pagedItems = PaginationManager.applyPaging(items , datasetTableRequest); DataTableData dataTable = new DataTableData<>(); CompletableFuture> itemsFuture = pagedItems. diff --git a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html index 1167c3803..71525dab2 100644 --- a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html +++ b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html @@ -1,97 +1,97 @@
-

{{'DATASET-PUBLIC-LISTING.TITLE' | translate}} {{titlePrefix}}

-
-
- +

{{'DATASET-PUBLIC-LISTING.TITLE' | translate}} {{titlePrefix}}

+
+
+ - -
-
-
- - - - - - + +
+
+
+ + + + + + - - - {{'DATASET-LISTING.COLUMNS.NAME' | translate}} - {{row.label}} - + + + {{'DATASET-LISTING.COLUMNS.NAME' | translate}} + {{row.label}} + - - - {{'DATASET-LISTING.COLUMNS.PROJECT' | - translate}} - {{row.project}} - + + + {{'DATASET-LISTING.COLUMNS.PROJECT' | + translate}} + {{row.project}} + - - - {{'DATASET-LISTING.COLUMNS.PROFILE' - | translate}} - {{row.profile}} - + + + {{'DATASET-LISTING.COLUMNS.PROFILE' + | translate}} + {{row.profile}} + - - - {{'DATASET-LISTING.COLUMNS.STATUS' | translate}} - {{row.status}} - + + + {{'DATASET-LISTING.COLUMNS.STATUS' | translate}} + {{row.status}} + - - + - - + - - + - - + - - - {{'DATASET-LISTING.COLUMNS.DESCRIPTION' | translate}} - {{row.description}} - + + + {{'DATASET-LISTING.COLUMNS.DESCRIPTION' | translate}} + {{row.description}} + - - - {{'DATASET-LISTING.COLUMNS.CREATED' | - translate}} - {{row.created | date:'shortDate'}} - + + + {{'DATASET-LISTING.COLUMNS.CREATED' | + translate}} + {{row.created | date:'shortDate'}} + - - - + + + - - - - + + + + -
+
-
-
+
+
diff --git a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.ts b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.ts index 692db13c7..8f2097212 100644 --- a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.ts +++ b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.ts @@ -24,7 +24,7 @@ export class DatasetPublicListingComponent implements OnInit { @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; - @ViewChild(DatasetCriteriaComponent) criteria: DatasetCriteriaComponent; + criteria: FacetSearchCriteriaModel; dataSource: DatasetDataSource | null; displayedColumns: String[] = ['label', 'project', 'profile', 'status', 'description', 'created']; @@ -43,13 +43,10 @@ export class DatasetPublicListingComponent implements OnInit { } - ngOnInit() { this.route.params.subscribe(async (params: Params) => { this.dmpId = params['dmpId']; - this.criteria.setCriteria(this.getDefaultCriteria(this.dmpId)); this.refresh(); - this.criteria.setRefreshCallback(() => this.refresh()); if (this.dmpId != null) { const dmp = await this.dataManagementPlanService.getSingle(this.dmpId).toPromise(); if (params['dmpLabel'] !== undefined) { @@ -59,9 +56,9 @@ export class DatasetPublicListingComponent implements OnInit { }); } - onCriteriaChange(event) { + onCriteriaChange(event: FacetSearchCriteriaModel) { //console.log(event) - this.criteria.setCriteria(event); + this.criteria = event; this.refresh(); } @@ -97,7 +94,7 @@ export class DatasetDataSource extends DataSource { private _sort: MatSort, private _languageService: TranslateService, private _snackBar: MatSnackBar, - private _criteria: DatasetCriteriaComponent, + private _criteria: FacetSearchCriteriaModel, private dmpId: String ) { super(); @@ -121,7 +118,7 @@ export class DatasetDataSource extends DataSource { let fields: Array = new Array(); if (this._sort.active) { fields = this._sort.direction === 'asc' ? ['+' + this._sort.active] : ['-' + this._sort.active]; } const request = new DataTableRequest(startIndex, this._paginator.pageSize, { fields: fields }); - request.criteria = this._criteria.criteria; + request.criteria = this._criteria; //if (this.dmpId) request.criteria.allVersions = true; return this._service.getPublicPaged(request); }) diff --git a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html index b14a0eb07..e2ce888d3 100644 --- a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html +++ b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html @@ -131,12 +131,12 @@
- - -
diff --git a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts index 24214b387..20e217908 100644 --- a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts +++ b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts @@ -368,6 +368,7 @@ export class DataManagementPlanEditorComponent implements AfterViewInit, IBreadC } else { this.dataManagementPlanService.unlock(this.formGroup.get('id').value).subscribe(x => { this.editMode = true; + this.formGroup.get('status').patchValue(DataManagementPlanStatus.Draft); this.formGroup.enable(); }); } diff --git a/dmp-frontend/src/app/models/facet-search/FacetSearchCriteriaModel.ts b/dmp-frontend/src/app/models/facet-search/FacetSearchCriteriaModel.ts index fe1731a8e..b177c5493 100644 --- a/dmp-frontend/src/app/models/facet-search/FacetSearchCriteriaModel.ts +++ b/dmp-frontend/src/app/models/facet-search/FacetSearchCriteriaModel.ts @@ -1,8 +1,11 @@ import { ProjectStateType } from '../projects/ProjectStateType'; +import { BaseCriteria } from '../criteria/BaseCriteria'; +import { TagModel } from '../tags/TagModel'; -export class FacetSearchCriteriaModel { +export class FacetSearchCriteriaModel extends BaseCriteria { public projectStatus: ProjectStateType; public projects: string[] = []; public datasetProfile: string[] = []; public dmpOrganisations: string[] = []; + public tags = []; } diff --git a/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.html b/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.html index 4c769a7c5..6721646b1 100644 --- a/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.html +++ b/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.html @@ -6,28 +6,14 @@
- -
+
{{baseErrorModel['Criteria.like']}}
-
+
@@ -38,7 +24,7 @@ {{baseErrorModel['Criteria.status']}}
-
+
@@ -57,8 +43,3 @@
- - diff --git a/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.ts b/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.ts index 682eb48b4..8ad5a1f2f 100644 --- a/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.ts +++ b/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.ts @@ -23,10 +23,6 @@ import { ExternalSourcesItemModel } from '../../../../models/external-sources/Ex export class DatasetCriteriaComponent extends BaseCriteriaComponent implements OnInit { - // public form: ProjectType; - // public formStatus: ProjectStatus; - @Input() - public isPublic = false; public criteria: any; public filteringTagsAsync = false; public filteredTags: ExternalSourcesItemModel[]; diff --git a/dmp-frontend/src/app/shared/components/facets/facet-search.component.html b/dmp-frontend/src/app/shared/components/facets/facet-search.component.html index bc088222f..7e4e91a73 100644 --- a/dmp-frontend/src/app/shared/components/facets/facet-search.component.html +++ b/dmp-frontend/src/app/shared/components/facets/facet-search.component.html @@ -1,4 +1,32 @@ + + + + + + +
+ + + +
+
+ + +
{{chip.name.substring(0, 1).toUpperCase()}}
+ {{chip.name}} +
+ +
+ {{option.name}} +
+
+ +
+
+
diff --git a/dmp-frontend/src/app/shared/components/facets/facet-search.component.ts b/dmp-frontend/src/app/shared/components/facets/facet-search.component.ts index bf2baf327..93fbc7288 100644 --- a/dmp-frontend/src/app/shared/components/facets/facet-search.component.ts +++ b/dmp-frontend/src/app/shared/components/facets/facet-search.component.ts @@ -7,19 +7,14 @@ import { ProjectStateType } from '../../../models/projects/ProjectStateType'; import { ProjectModel } from '../../../models/projects/ProjectModel'; import { ProjectService } from '../../../services/project/project.service'; import { ProjectCriteria } from '../../../models/criteria/project/ProjectCriteria'; -import { DataTableRequest } from '../../../models/data-table/DataTableRequest'; -import { ProjectListingModel } from '../../../models/projects/ProjectListingModel'; -import { MatSelectionList, MatListOption, MatSelectionListChange, MatAccordion } from '@angular/material'; -import { SelectionModel } from '@angular/cdk/collections'; -import { DatasetProfileService } from '../../../services/dataset-profile.service'; import { DatasetService } from '../../../services/dataset/dataset.service'; import { DatasetProfileModel } from '../../../models/datasetprofile/DatasetProfileModel'; import { RequestItem } from '../../../models/criteria/RequestItem'; import { ExternalSourcesService } from '../../../services/external-sources/external-sources.service'; import { ExternalSourcesItemModel } from '../../../models/external-sources/ExternalSourcesItemModel'; -import { FormControl } from '@angular/forms'; -import { LanguageService } from '../../../services/language/language.service'; import { TranslateService } from '@ngx-translate/core'; +import { MatAccordion } from '@angular/material'; +import { TagsCriteria } from '../../../models/criteria/tags/TagsCriteria'; @Component({ selector: 'app-facet', @@ -32,6 +27,8 @@ export class FacetSearchComponent implements OnInit, AfterViewInit { @Input() facetCriteria = new FacetSearchCriteriaModel(); @Output() facetCriteriaChange = new EventEmitter(); + public filteringTagsAsync = false; + public filteredTags: ExternalSourcesItemModel[]; ProjectStateType = ProjectStateType; projects: Observable; profiles: Observable; @@ -157,4 +154,24 @@ export class FacetSearchComponent implements OnInit, AfterViewInit { public profileSearch(value: string) { return this.datasetProfileService.getDatasetProfiles(); } + + public controlModified() { + this.facetCriteriaChange.emit(this.facetCriteria); + } + + filterTags(value: string): void { + this.filteredTags = undefined; + if (value) { + this.filteringTagsAsync = true; + const requestItem: RequestItem = new RequestItem(); + const criteria: TagsCriteria = new TagsCriteria(); + criteria.like = value; + requestItem.criteria = criteria; + this.externalSourcesService.searchDatasetTags(requestItem).subscribe(items => { + this.filteredTags = items; + this.filteringTagsAsync = false; + }); + + } + } }