From ecd86f413a2658bbc170fbc50863221149ccc605 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Fri, 6 Oct 2023 11:22:23 +0300 Subject: [PATCH] show prefilling pop up if only at least one dataset profile has enabled prefilling property --- .../eu/eudat/controllers/DatasetProfiles.java | 8 +++ .../logic/managers/DatasetProfileManager.java | 17 +++++ ...setProfileWithPrefillingPropertyModel.java | 30 ++++++++ .../app/core/model/dataset/dataset-profile.ts | 6 ++ .../dataset-profile-criteria.ts | 1 + .../core/services/dataset/dataset.service.ts | 7 +- .../dataset-wizard.component.ts | 70 +++++++++++++------ 7 files changed, 115 insertions(+), 24 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/datasetprofile/DatasetProfileWithPrefillingPropertyModel.java diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfiles.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfiles.java index 372ad6b1d..45ec4d925 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfiles.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfiles.java @@ -6,6 +6,7 @@ import eu.eudat.logic.managers.DatasetProfileManager; import eu.eudat.logic.services.ApiContext; import eu.eudat.models.data.datasetprofile.DatasetProfileAutocompleteItem; import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; +import eu.eudat.models.data.datasetprofile.DatasetProfileWithPrefillingPropertyModel; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.types.ApiMessageCode; import org.springframework.beans.factory.annotation.Autowired; @@ -42,5 +43,12 @@ public class DatasetProfiles extends BaseController { List datasetProfileTableData = this.datasetProfileManager.getAll(tableRequestItem); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); } + + @RequestMapping(method = RequestMethod.POST, value = {"/datasetprofiles/getAllWithPrefilling"}, produces = "application/json") + public @ResponseBody + ResponseEntity>> getAllWithPrefilling(@RequestBody DatasetProfileTableRequestItem tableRequestItem) { + List datasetProfileTableData = this.datasetProfileManager.getAllWithPrefilling(tableRequestItem); + 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/DatasetProfileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java index faf184cf8..c627bc16a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java @@ -18,9 +18,11 @@ import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ExportXmlBuilderDatasetProfile; import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ImportXmlBuilderDatasetProfile; +import eu.eudat.models.data.admin.composite.DatasetProfile; import eu.eudat.models.data.components.commons.datafield.AutoCompleteData; import eu.eudat.models.data.datasetprofile.DatasetProfileAutocompleteItem; import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; +import eu.eudat.models.data.datasetprofile.DatasetProfileWithPrefillingPropertyModel; import eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field; import eu.eudat.models.data.externaldataset.ExternalAutocompleteFieldModel; import eu.eudat.models.data.helpers.common.DataTableData; @@ -129,6 +131,21 @@ public class DatasetProfileManager { return datasetProfiles; } + public List getAllWithPrefilling(DatasetProfileTableRequestItem tableRequestItem) { + List datasetProfiles = new ArrayList<>(); + if (!tableRequestItem.getCriteria().getIds().isEmpty()) { + tableRequestItem.getCriteria().getIds().forEach(id -> { + DatasetProfile datasetProfile = this.getDatasetProfile(id.toString()); + DatasetProfileWithPrefillingPropertyModel profileModel = new DatasetProfileWithPrefillingPropertyModel(); + profileModel.setId(id); + profileModel.setLabel(datasetProfile.getLabel()); + profileModel.setEnablePrefilling(datasetProfile.isEnablePrefilling()); + datasetProfiles.add(profileModel); + }); + } + return datasetProfiles; + } + public eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field queryForField(String xml, String fieldId) throws XPathExpressionException { eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field field = new Field(); Document document = XmlBuilder.fromXml(xml); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetprofile/DatasetProfileWithPrefillingPropertyModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetprofile/DatasetProfileWithPrefillingPropertyModel.java new file mode 100644 index 000000000..7cc7a0f86 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetprofile/DatasetProfileWithPrefillingPropertyModel.java @@ -0,0 +1,30 @@ +package eu.eudat.models.data.datasetprofile; + +import java.util.UUID; + +public class DatasetProfileWithPrefillingPropertyModel { + private UUID id; + private String label; + private boolean enablePrefilling; + + public UUID getId() { + return id; + } + public void setId(UUID id) { + this.id = id; + } + + public String getLabel() { + return label; + } + public void setLabel(String label) { + this.label = label; + } + + public boolean isEnablePrefilling() { + return enablePrefilling; + } + public void setEnablePrefilling(boolean enablePrefilling) { + this.enablePrefilling = enablePrefilling; + } +} diff --git a/dmp-frontend/src/app/core/model/dataset/dataset-profile.ts b/dmp-frontend/src/app/core/model/dataset/dataset-profile.ts index d67dce6b0..7e6708dfb 100644 --- a/dmp-frontend/src/app/core/model/dataset/dataset-profile.ts +++ b/dmp-frontend/src/app/core/model/dataset/dataset-profile.ts @@ -5,6 +5,12 @@ export interface DatasetProfileModel { description: string; } +export interface DatasetProfileWithPrefillingModel { + id: string; + label: string; + enablePrefilling: boolean; +} + // export class DatasetProfileModel implements Serializable { // public id: String; // public label: String; diff --git a/dmp-frontend/src/app/core/query/dataset-profile/dataset-profile-criteria.ts b/dmp-frontend/src/app/core/query/dataset-profile/dataset-profile-criteria.ts index b9bbd9b5e..b447f336b 100644 --- a/dmp-frontend/src/app/core/query/dataset-profile/dataset-profile-criteria.ts +++ b/dmp-frontend/src/app/core/query/dataset-profile/dataset-profile-criteria.ts @@ -3,6 +3,7 @@ import { BaseCriteria } from "../base-criteria"; export class DatasetProfileCriteria extends BaseCriteria { public id: String; public groupIds: string[]; + public ids: string[]; public allVersions: boolean; public finalized: boolean = true; public status: number; 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 418196418..f62f7d16a 100644 --- a/dmp-frontend/src/app/core/services/dataset/dataset.service.ts +++ b/dmp-frontend/src/app/core/services/dataset/dataset.service.ts @@ -1,10 +1,9 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { environment } from '../../../../environments/environment'; import { DataTableData } from '../../model/data-table/data-table-data'; import { DataTableRequest } from '../../model/data-table/data-table-request'; import { DatasetListingModel } from '../../model/dataset/dataset-listing'; -import { DatasetProfileModel } from '../../model/dataset/dataset-profile'; +import { DatasetProfileModel, DatasetProfileWithPrefillingModel } 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'; @@ -43,6 +42,10 @@ export class DatasetService { return this.http.post(this.configurationSevice.server + 'datasetprofiles/getAll', dataTableRequest); } + getDatasetProfilesWithPrefilling(dataTableRequest: DataTableRequest): Observable { + return this.http.post(this.configurationSevice.server + 'datasetprofiles/getAllWithPrefilling', dataTableRequest); + } + getDatasetProfilesUsedPaged(dataTableRequest: DataTableRequest) { return this.http.post>(this.actionUrl + 'datasetProfilesUsedByDatasets/paged', dataTableRequest); } 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 f8a91057a..afbb4b901 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 @@ -63,6 +63,9 @@ import {PrefillDatasetComponent} from "@app/ui/dataset/dataset-wizard/prefill-da import {ToCEntry, ToCEntryType} from "@app/ui/misc/dataset-description-form/dataset-description.component"; import {dispatchFakeEvent} from "@angular/cdk/testing/testbed/fake-events"; import { DmpDatasetProfile } from '@app/core/model/dmp/dmp-dataset-profile/dmp-dataset-profile'; +import { DmpProfileService } from '@app/core/services/dmp/dmp-profile.service'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { DatasetCriteria } from '@app/core/query/dataset/dataset-criteria'; @Component({ selector: 'app-dataset-wizard-component', @@ -98,6 +101,7 @@ export class DatasetWizardComponent extends CheckDeactivateBaseComponent impleme dmpId: string; dmpSectionIndex: number; availableDescriptionTemplates: DatasetProfileModel[] = []; + availableDescriptionTemplatesForPrefilling: DatasetProfileModel[] = []; newDmpId: string; publicId: string; profileUpdateId: string; @@ -127,12 +131,14 @@ export class DatasetWizardComponent extends CheckDeactivateBaseComponent impleme constructor( private datasetWizardService: DatasetWizardService, + private datasetService: DatasetService, private route: ActivatedRoute, public snackBar: MatSnackBar, public router: Router, public language: TranslateService, public externalSourcesService: ExternalSourcesService, public dmpService: DmpService, + private dmpProfileService: DmpProfileService, public dialog: MatDialog, public externalSourcesConfigurationService: ExternalSourcesConfigurationService, private uiNotificationService: UiNotificationService, @@ -284,28 +290,48 @@ export class DatasetWizardComponent extends CheckDeactivateBaseComponent impleme this.formGroupRawValue = JSON.parse(JSON.stringify(this.formGroup.getRawValue())); this.editMode = this.datasetWizardModel.status === DatasetStatus.Draft; this.formGroup.get('dmp').disable(); - const dialogRef = this.dialog.open(PrefillDatasetComponent, { - width: '590px', - minHeight: '200px', - restoreFocus: false, - data: { - availableProfiles: this.availableDescriptionTemplates, - datasetFormGroup: this.formGroup - }, - panelClass: 'custom-modalbox' - }); - dialogRef.afterClosed().subscribe(result => { - if(result) { - this.datasetWizardModel = this.datasetWizardModel.fromModel(result); - this.datasetWizardModel.dmp = data; - this.datasetWizardModel.dmpSectionIndex = this.dmpSectionIndex; - this.formGroup = this.datasetWizardModel.buildForm(); - this.formGroupRawValue = JSON.parse(JSON.stringify(this.formGroup.getRawValue())); - this.formGroup.get('dmp').disable(); - this.loadDatasetProfiles(); - this.registerFormListeners(); - } - }) + this.dmpProfileService.getSingleBlueprint(data.profile.id) + .pipe(takeUntil(this._destroyed)) + .subscribe(result => { + const request: DataTableRequest = new DataTableRequest(null, null, null); + request.criteria = new DatasetProfileCriteria(); + request.criteria.ids = []; + result.definition.sections[this.dmpSectionIndex].descriptionTemplates.forEach(template => request.criteria.ids.push(template.descriptionTemplateId)); + this.availableDescriptionTemplates.forEach(template => request.criteria.ids.push(template.id)); + this.datasetService.getDatasetProfilesWithPrefilling(request) + .pipe(takeUntil(this._destroyed)) + .subscribe(items => { + items.forEach(template => { + if(template.enablePrefilling){ + this.availableDescriptionTemplatesForPrefilling.push({id: template.id, label: template.label, description: ''}); + } + }) + if (this.availableDescriptionTemplatesForPrefilling.length > 0) { + const dialogRef = this.dialog.open(PrefillDatasetComponent, { + width: '590px', + minHeight: '200px', + restoreFocus: false, + data: { + availableProfiles: this.availableDescriptionTemplatesForPrefilling, + datasetFormGroup: this.formGroup + }, + panelClass: 'custom-modalbox' + }); + dialogRef.afterClosed().subscribe(result => { + if(result) { + this.datasetWizardModel = this.datasetWizardModel.fromModel(result); + this.datasetWizardModel.dmp = data; + this.datasetWizardModel.dmpSectionIndex = this.dmpSectionIndex; + this.formGroup = this.datasetWizardModel.buildForm(); + this.formGroupRawValue = JSON.parse(JSON.stringify(this.formGroup.getRawValue())); + this.formGroup.get('dmp').disable(); + this.loadDatasetProfiles(); + this.registerFormListeners(); + } + }) + } + }); + }); this.loadDatasetProfiles(); this.registerFormListeners(); // this.availableProfiles = data.profiles;