diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Tag.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Tag.java index eb382a81e..e79e91a34 100644 --- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Tag.java +++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Tag.java @@ -13,6 +13,14 @@ public class Tag implements ElasticEntity { private String id; private String name; + public Tag() { + } + + public Tag(String id, String name) { + this.id = id; + this.name = name; + } + public String getId() { return id; } 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 2a9060acb..9430fa269 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 @@ -220,7 +220,11 @@ public class DataManagementPlanManager { datasetEnities.stream() .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED) && !dataset.getStatus().equals(Dataset.Status.CANCELED)) .forEach(dataset -> { - dataManagementPlan.getDatasets().stream().filter(datasetWizardModel -> datasetWizardModel.getId().equals(dataset.getId())).forEach(datasetWizardModel -> datasetWizardModel.setDatasetProfileDefinition(datasetManager.getPagedProfile(datasetWizardModel, dataset))); + dataManagementPlan.getDatasets().stream().filter(datasetWizardModel -> datasetWizardModel.getId().equals(dataset.getId())).forEach(datasetWizardModel -> { + DatasetWizardModel wizardModel = datasetManager.getSingle(datasetWizardModel.getId().toString(), principal); + datasetWizardModel.setDatasetProfileDefinition(wizardModel.getDatasetProfileDefinition()); + datasetWizardModel.setTags(wizardModel.getTags()); + }); }); if (isPublic) { dataManagementPlan.setDatasets(dataManagementPlan.getDatasets().stream().filter(dataset -> dataset.getStatus() == Dataset.Status.FINALISED.getValue()).collect(Collectors.toList())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetMapper.java index 6e39738fa..46d4f632b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/DatasetMapper.java @@ -37,6 +37,9 @@ public class DatasetMapper { tags.forEach(tag -> tag.setId(UUID.randomUUID().toString())); elastic.setTags(tags); } else { + if (tags1.size() < tags.size()) { + tags.stream().filter(tag -> tag.getId() == null || tag.getId().equals("")).forEach(tag -> tags1.add(new Tag(UUID.randomUUID().toString(), tag.getName()))); + } elastic.setTags(tags1); } } diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard-editor.model.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard-editor.model.ts index 334dec486..f4ad2cf38 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard-editor.model.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard-editor.model.ts @@ -61,7 +61,7 @@ export class DatasetWizardEditorModel { description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], dmp: [{ value: this.dmp, disabled: disabled }, context.getValidation('dmp').validators], //externalDatasets: [{ value: this.externalDatasets, disabled: disabled }, context.getValidation('externalDatasets').validators], - // tags: [{ value: this.tags, disabled: disabled }, context.getValidation('tags').validators], + tags: [{ value: this.tags, disabled: disabled }, context.getValidation('tags').validators], //registries: [{ value: this.registries, disabled: disabled }, context.getValidation('registries').validators], //dataRepositories: [{ value: this.dataRepositories, disabled: disabled }, context.getValidation('dataRepositories').validators], //services: [{ value: this.services, disabled: disabled }, context.getValidation('services').validators], @@ -119,11 +119,11 @@ export class DatasetWizardEditorModel { // } formGroup.addControl('services', formBuilder.array(servicesFormArray)); - const tagsFormArray = new Array(); - this.tags.forEach(item => { - tagsFormArray.push(item.buildForm(context.getValidation('tags').descendantValidations, disabled)); - }); - formGroup.addControl('tags', formBuilder.array(tagsFormArray)); + // const tagsFormArray = new Array(); + // this.tags.forEach(item => { + // tagsFormArray.push(item.buildForm(context.getValidation('tags').descendantValidations, disabled)); + // }); + // formGroup.addControl('tags', formBuilder.array(tagsFormArray)); if (this.datasetProfileDefinition) { formGroup.addControl('datasetProfileDefinition', this.datasetProfileDefinition.buildForm()); } // formGroup.addControl('profile', this.profile.buildForm()); diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.html b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.html index 073ce1794..e58b2ca19 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.html +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.html @@ -6,34 +6,11 @@

1.4 {{'DATASET-EDITOR.FIELDS.TAGS' | translate}}

- - - - - -
-
-

- {{i+1}}) {{suggestion.get('name').value}} -

-
-
- -
-
-
+
diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts index 787480619..0a5d5f758 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/external-references/dataset-external-references-editor.component.ts @@ -21,7 +21,7 @@ import { DatasetExternalServiceDialogEditorComponent } from '@app/ui/dataset/dat import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; +import { takeUntil, map } from 'rxjs/operators'; import { ENTER, COMMA } from '@angular/cdk/keycodes'; import { MatChipInputEvent } from '@angular/material/chips'; import { isNullOrUndefined } from 'util'; @@ -29,6 +29,7 @@ import { ExternalDataRepositoryService } from '@app/core/services/external-sourc import { ExternalDatasetService } from '@app/core/services/external-sources/dataset/external-dataset.service'; import { ExternalRegistryService } from '@app/core/services/external-sources/registry/external-registry.service'; import { ExternalServiceService } from '@app/core/services/external-sources/service/external-service.service'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; @Component({ selector: 'app-dataset-external-references-editor-component', @@ -41,6 +42,9 @@ export class DatasetExternalReferencesEditorComponent extends BaseComponent impl @Input() viewOnly = false; @Output() formChanged: EventEmitter = new EventEmitter(); + public filteringTagsAsync = false; + public filteredTags: ExternalSourceItemModel[]; + readonly separatorKeysCodes: number[] = [ENTER, COMMA]; externalDatasetAutoCompleteConfiguration: SingleAutoCompleteConfiguration = { @@ -75,12 +79,12 @@ export class DatasetExternalReferencesEditorComponent extends BaseComponent impl subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') }; - tagsAutoCompleteConfiguration: SingleAutoCompleteConfiguration = { - filterFn: this.searchDatasetTags.bind(this), - initialItems: (type) => this.searchDatasetTags('', type), - displayFn: (item) => item ? item.name : null, - titleFn: (item) => item ? item.name : null, - subtitleFn: (item) => item.tag ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.tag : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE') + tagsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { + filterFn: this.filterTags.bind(this), + initialItems: (excludedItems: any[]) => this.filterTags('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))), + displayFn: (item) => this.showTag(item), + titleFn: (item) => item['name'], + valueAssign: (item) => this.addTag(item) }; externalSourcesConfiguration: ExternalSourcesConfiguration; @@ -257,11 +261,17 @@ export class DatasetExternalReferencesEditorComponent extends BaseComponent impl (this.formGroup.get('tags')).removeAt(((this.formGroup.get('tags')).value as any[]).indexOf(tag)); } - addTag(ev: MatChipInputEvent) { - if (ev.value !== '' && isNullOrUndefined(((this.formGroup.get('tags')).value as ExternalTagEditorModel[]).find(tag => tag.name === ev.value))) { - (this.formGroup.get('tags')).push(new ExternalTagEditorModel('', ev.value).buildForm()); + addTag(ev: any) { + let item: ExternalTagEditorModel; + //this.filteredTags = this.formGroup.get('tags').value; + if (typeof ev === 'string') { + item = new ExternalTagEditorModel('', ev); + } else { + item = ev; + } + if (item.name !== '' ) { + return item; } - ev.input.value = ''; } isInternal(element: any): boolean { @@ -310,4 +320,22 @@ export class DatasetExternalReferencesEditorComponent extends BaseComponent impl } ); } + + filterTags(value: string): Observable { + this.filteringTagsAsync = true; + + const requestItem: RequestItem = new RequestItem(); + const criteria: TagCriteria = new TagCriteria(); + criteria.like = value; + requestItem.criteria = criteria; + return this.externalSourcesService.searchDatasetTags(requestItem); + } + + showTag(ev: any) { + if (typeof ev === 'string') { + return ev; + } else { + return ev.name; + } + } }