prefilling source changes
This commit is contained in:
parent
a5c194ac95
commit
f0c076fe4f
|
@ -134,10 +134,6 @@ public class AuditableAction {
|
|||
public static final EventId ContactSupport_Sent = new EventId(210000, "ContactSupport_Sent");
|
||||
public static final EventId ContactSupport_PublicSent = new EventId(210001, "ContactSupport_PublicSent");
|
||||
|
||||
public static final EventId Prefilling_Query = new EventId(220000, "Prefilling_Query");
|
||||
public static final EventId Prefilling_Generate = new EventId(210001, "Prefilling_Generate");
|
||||
public static final EventId Prefilling_GenerateWithData = new EventId(210002, "Prefilling_GenerateWithData");
|
||||
|
||||
public static final EventId Maintenance_GenerateElastic = new EventId(220000, "Maintenance_GenerateElastic");
|
||||
public static final EventId Maintenance_ClearElastic = new EventId(230000, "Maintenance_ClearElastic");
|
||||
|
||||
|
@ -149,6 +145,8 @@ public class AuditableAction {
|
|||
public static final EventId PrefillingSource_Lookup = new EventId(260001, "PrefillingSource_Lookup");
|
||||
public static final EventId PrefillingSource_Persist = new EventId(260002, "PrefillingSource_Persist");
|
||||
public static final EventId PrefillingSource_Delete = new EventId(260003, "PrefillingSource_Delete");
|
||||
public static final EventId PrefillingSource_Generate = new EventId(260005, "PrefillingSource_Generate");
|
||||
public static final EventId PrefillingSource_GenerateWithData = new EventId(260006, "PrefillingSource_GenerateWithData");
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -80,10 +80,10 @@ public class DescriptionProfilingRequest {
|
|||
.failOn(DescriptionProfilingRequest._descriptionTemplateId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingRequest._descriptionTemplateId}, LocaleContextHolder.getLocale())),
|
||||
this.spec()
|
||||
.must(() -> this.isValidGuid(item.getPrefillingSourceId()))
|
||||
.failOn(DescriptionProfilingRequest._prefillingSourceId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingRequest._prefillingSourceId}, LocaleContextHolder.getLocale())),
|
||||
this.spec()
|
||||
.must(() -> item.getProject() != null)
|
||||
.failOn(DescriptionProfilingRequest._project).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingRequest._project}, LocaleContextHolder.getLocale()))
|
||||
.failOn(DescriptionProfilingRequest._prefillingSourceId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingRequest._prefillingSourceId}, LocaleContextHolder.getLocale()))
|
||||
// this.spec() TODO
|
||||
// .must(() -> item.getProject() != null)
|
||||
// .failOn(DescriptionProfilingRequest._project).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingRequest._project}, LocaleContextHolder.getLocale()))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,13 +91,13 @@ public class DescriptionProfilingWithDataRequest {
|
|||
.failOn(DescriptionProfilingWithDataRequest._descriptionTemplateId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingWithDataRequest._descriptionTemplateId}, LocaleContextHolder.getLocale())),
|
||||
this.spec()
|
||||
.must(() -> this.isValidGuid(item.getPrefillingSourceId()))
|
||||
.failOn(DescriptionProfilingWithDataRequest._prefillingSourceId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingWithDataRequest._prefillingSourceId}, LocaleContextHolder.getLocale())),
|
||||
this.spec()
|
||||
.must(() -> item.getData() != null)
|
||||
.failOn(DescriptionProfilingWithDataRequest._data).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingWithDataRequest._data}, LocaleContextHolder.getLocale())),
|
||||
this.spec()
|
||||
.must(() -> item.getProject() != null)
|
||||
.failOn(DescriptionProfilingWithDataRequest._project).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingWithDataRequest._project}, LocaleContextHolder.getLocale()))
|
||||
.failOn(DescriptionProfilingWithDataRequest._prefillingSourceId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingWithDataRequest._prefillingSourceId}, LocaleContextHolder.getLocale()))
|
||||
// this.spec() TODO
|
||||
// .must(() -> item.getData() != null)
|
||||
// .failOn(DescriptionProfilingWithDataRequest._data).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingWithDataRequest._data}, LocaleContextHolder.getLocale()))
|
||||
// this.spec()
|
||||
// .must(() -> item.getProject() != null)
|
||||
// .failOn(DescriptionProfilingWithDataRequest._project).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionProfilingWithDataRequest._project}, LocaleContextHolder.getLocale()))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ import eu.eudat.model.referencedefinition.Definition;
|
|||
import eu.eudat.query.PrefillingSourceQuery;
|
||||
import eu.eudat.query.lookup.ReferenceSearchLookup;
|
||||
import eu.eudat.service.externalfetcher.ExternalFetcherService;
|
||||
import eu.eudat.service.externalfetcher.criteria.ExternalReferenceCriteria;
|
||||
import eu.eudat.service.externalfetcher.models.ExternalDataResult;
|
||||
import eu.eudat.service.reference.ReferenceService;
|
||||
import gr.cite.commons.web.authz.service.AuthorizationService;
|
||||
|
@ -91,7 +92,7 @@ public class PrefillingSourceServiceImpl implements PrefillingSourceService {
|
|||
private final JsonHandlingService jsonHandlingService;
|
||||
private final ReferenceService referenceService;
|
||||
|
||||
private static final String Zenodo = "zenodo";
|
||||
private static final String Zenodo = "Zenodo";
|
||||
|
||||
public PrefillingSourceServiceImpl(
|
||||
EntityManager entityManager, AuthorizationService authorizationService, DeleterFactory deleterFactory, BuilderFactory builderFactory,
|
||||
|
@ -328,7 +329,7 @@ public class PrefillingSourceServiceImpl implements PrefillingSourceService {
|
|||
PrefillingSourceDefinitionEntity prefillingSourceDefinition = this.xmlHandlingService.fromXmlSafe(PrefillingSourceDefinitionEntity.class, prefillingSourceEntity.getDefinition());
|
||||
if (prefillingSourceDefinition == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getPrefillingSourceId(), PrefillingSourceDefinition.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
||||
|
||||
ExternalDataResult externalData = this.externalFetcherService.getExternalData(Stream.of(prefillingSourceDefinition.getGetConfiguration()).collect(Collectors.toList()), null, null);
|
||||
ExternalDataResult externalData = this.externalFetcherService.getExternalData(Stream.of(prefillingSourceDefinition.getGetConfiguration()).collect(Collectors.toList()), new ExternalReferenceCriteria(), null);
|
||||
if (externalData == null || this.conventionService.isListNullOrEmpty(externalData.getResults())) {
|
||||
return null;
|
||||
}
|
||||
|
@ -343,25 +344,33 @@ public class PrefillingSourceServiceImpl implements PrefillingSourceService {
|
|||
}
|
||||
|
||||
private Description mapPrefilledEntityToDescription(Description description, DefinitionEntity descriptionTemplateDefinition, PrefillingSourceDefinitionEntity prefillingSourceDefinition, String type, Map<String, String> externalData){
|
||||
if (!this.conventionService.isListNullOrEmpty(prefillingSourceDefinition.getFields())) {
|
||||
for (PrefillingSourceDefinitionFieldEntity field : prefillingSourceDefinition.getFields()) {
|
||||
String sourceValue = externalData.get(field.getCode());
|
||||
this.prefillSystemValueToDescription(description, field.getSystemFieldTarget(), sourceValue);
|
||||
this.prefillSemanticValueToDescription(description, field.getSemanticTarget(), sourceValue, descriptionTemplateDefinition, type);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.conventionService.isListNullOrEmpty(prefillingSourceDefinition.getFixedValueFields())){
|
||||
for (PrefillingSourceDefinitionFixedValueFieldEntity field: prefillingSourceDefinition.getFixedValueFields()) {
|
||||
this.prefillSystemValueToDescription(description, field.getSystemFieldTarget(), field.getFixedValue());
|
||||
this.prefillSemanticValueToDescription(description, field.getSemanticTarget(), field.getFixedValue(), descriptionTemplateDefinition, type);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.conventionService.isListNullOrEmpty(prefillingSourceDefinition.getFields())) {
|
||||
for (PrefillingSourceDefinitionFieldEntity field : prefillingSourceDefinition.getFields()) {
|
||||
String sourceValue = externalData.get(field.getCode());
|
||||
this.ensureZenodoFields(description, field.getSemanticTarget(), sourceValue, descriptionTemplateDefinition, type);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.conventionService.isListNullOrEmpty(prefillingSourceDefinition.getFixedValueFields())) {
|
||||
for (PrefillingSourceDefinitionFixedValueFieldEntity field : prefillingSourceDefinition.getFixedValueFields()) {
|
||||
this.ensureZenodoFields(description, field.getSemanticTarget(), field.getFixedValue(), descriptionTemplateDefinition, type);
|
||||
}
|
||||
}
|
||||
|
||||
return description;
|
||||
}
|
||||
|
@ -371,7 +380,7 @@ public class PrefillingSourceServiceImpl implements PrefillingSourceService {
|
|||
if (semanticTarget.equals("rda.dataset.distribution.data_access")) {
|
||||
if (value.equals("open")) {
|
||||
List<FieldEntity> issuedFieldEntities = definition.getAllField().stream().filter(x -> x.getSchematics() != null && x.getSchematics().contains("rda.dataset.issued")).toList();
|
||||
if (this.conventionService.isListNullOrEmpty(issuedFieldEntities)) {
|
||||
if (!this.conventionService.isListNullOrEmpty(issuedFieldEntities)) {
|
||||
String issuedIdNode = issuedFieldEntities.getFirst().getId();
|
||||
String issuedValue = this.conventionService.isNullOrEmpty(issuedIdNode) ? null : description.getProperties().getFieldSets().values().stream().map(PropertyDefinitionFieldSet::getItems).flatMap(List::stream)
|
||||
.filter(x -> x.getFields() != null && x.getFields().containsKey(issuedIdNode)).map(x -> x.getFields().get(issuedIdNode).getTextValue()).findFirst().orElse(null);
|
||||
|
|
|
@ -153,7 +153,7 @@ public class PrefillingSourceController {
|
|||
|
||||
Description item = this.prefillingSourceService.getPrefilledDescription(model);
|
||||
|
||||
this.auditService.track(AuditableAction.Prefilling_Generate, Map.ofEntries(
|
||||
this.auditService.track(AuditableAction.PrefillingSource_Generate, Map.ofEntries(
|
||||
new AbstractMap.SimpleEntry<String, Object>("model", model)
|
||||
));
|
||||
|
||||
|
@ -169,7 +169,7 @@ public class PrefillingSourceController {
|
|||
|
||||
Description item = this.prefillingSourceService.getPrefilledDescriptionUsingData(model);
|
||||
|
||||
this.auditService.track(AuditableAction.Prefilling_GenerateWithData, Map.ofEntries(
|
||||
this.auditService.track(AuditableAction.PrefillingSource_GenerateWithData, Map.ofEntries(
|
||||
new AbstractMap.SimpleEntry<String, Object>("model", model)
|
||||
));
|
||||
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
import { Guid } from "@common/types/guid";
|
||||
|
||||
export interface DescriptionProfilingRequest {
|
||||
prefillingSourceId: Guid;
|
||||
descriptionTemplateId: Guid;
|
||||
}
|
||||
|
||||
export interface DescriptionProfilingWithDataRequest {
|
||||
prefillingSourceId: Guid;
|
||||
descriptionTemplateId: Guid;
|
||||
data: Map<String, Object>;
|
||||
}
|
|
@ -12,6 +12,8 @@ import { catchError, map } from 'rxjs/operators';
|
|||
import { nameof } from 'ts-simple-nameof';
|
||||
import { ConfigurationService } from '../configuration/configuration.service';
|
||||
import { BaseHttpV2Service } from '../http/base-http-v2.service';
|
||||
import { DescriptionProfilingRequest, DescriptionProfilingWithDataRequest } from '@app/core/model/description-profiling-request/description-profiling-request';
|
||||
import { Description } from '@app/core/model/description/description';
|
||||
|
||||
@Injectable()
|
||||
export class PrefillingSourceService {
|
||||
|
@ -55,6 +57,22 @@ export class PrefillingSourceService {
|
|||
catchError((error: any) => throwError(error)));
|
||||
}
|
||||
|
||||
generate(item: DescriptionProfilingRequest): Observable<Description> {
|
||||
const url = `${this.apiBase}/generate`;
|
||||
|
||||
return this.http
|
||||
.post<Description>(url, item).pipe(
|
||||
catchError((error: any) => throwError(error)));
|
||||
}
|
||||
|
||||
generateWithData(item: DescriptionProfilingWithDataRequest): Observable<Description> {
|
||||
const url = `${this.apiBase}/generate-with-data`;
|
||||
|
||||
return this.http
|
||||
.post<Description>(url, item).pipe(
|
||||
catchError((error: any) => throwError(error)));
|
||||
}
|
||||
|
||||
//
|
||||
// Autocomplete Commons
|
||||
//
|
||||
|
|
|
@ -13,6 +13,7 @@ import { TableOfContentsModule } from './table-of-contents/table-of-contents.mod
|
|||
import { RichTextEditorModule } from '@app/library/rich-text-editor/rich-text-editor.module';
|
||||
import { TagsFieldModule } from '@app/ui/tag/tags-field/tags-field.module';
|
||||
import { PrefillDescriptionDialogComponent } from './prefill-description/prefill-description.component';
|
||||
import { AutoCompleteModule } from '@app/library/auto-complete/auto-complete.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
|
@ -25,7 +26,8 @@ import { PrefillDescriptionDialogComponent } from './prefill-description/prefill
|
|||
DescriptionFormModule,
|
||||
DescriptionEditorRoutingModule,
|
||||
RichTextEditorModule,
|
||||
TagsFieldModule
|
||||
TagsFieldModule,
|
||||
AutoCompleteModule
|
||||
],
|
||||
declarations: [
|
||||
DescriptionEditorComponent,
|
||||
|
|
|
@ -25,14 +25,24 @@
|
|||
<h4 class="col-auto heading">{{'PREFILL-DESCRIPTION-DIALOG.DESCRIPTION-TEMPLATE' | translate}}</h4>
|
||||
</div>
|
||||
<mat-form-field class="col-md-12">
|
||||
<mat-select placeholder="{{'PREFILL-DESCRIPTION-DIALOG.DESCRIPTION-TEMPLATE'| translate}}" [required]="true" [compareWith]="compareWith" formControlName="descriptionTempalte">
|
||||
<mat-option *ngFor="let descriptionTempalte of availableDescriptionTempaltes" [value]="descriptionTempalte.id">
|
||||
<mat-select placeholder="{{'PREFILL-DESCRIPTION-DIALOG.DESCRIPTION-TEMPLATE'| translate}}" [required]="true" [compareWith]="compareWith" [formControl]="prefillForm.get('descriptionTemplateId')">
|
||||
<mat-option *ngFor="let descriptionTemplate of availableDescriptionTemplates" [value]="descriptionTemplate.id">
|
||||
<div>
|
||||
{{descriptionTempalte.label}}
|
||||
{{descriptionTemplate.label}}
|
||||
</div>
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="prefillForm.get('descriptionTempalte').hasError('backendError')">{{prefillForm.get('descriptionTempalte').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="prefillForm.get('descriptionTemplateId').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
<div class="col-12 pl-0 pr-0 pb-2 d-flex flex-row">
|
||||
<h4 class="col-auto heading">{{'PREFILL-DESCRIPTION-DIALOG.PREFILLING-SOURCE' | translate}}</h4>
|
||||
</div>
|
||||
<mat-form-field class="col-md-12">
|
||||
<app-single-auto-complete [required]="true" [formControl]="prefillForm.get('prefillingSourceId')"
|
||||
placeholder="{{'PREFILL-DESCRIPTION-DIALOG.PREFILLING-SOURCE' | translate}}"
|
||||
[configuration]="prefillingSourceService.singleAutocompleteConfiguration">
|
||||
</app-single-auto-complete>
|
||||
<mat-error *ngIf="prefillForm.get('prefillingSourceId').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<!-- <div *ngIf="prefillSelected" class="row">
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
import { Component, Inject, OnInit } from "@angular/core";
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms";
|
||||
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from "@angular/material/dialog";
|
||||
import { DescriptionProfilingRequest } from "@app/core/model/description-profiling-request/description-profiling-request";
|
||||
import { DescriptionTemplate } from "@app/core/model/description-template/description-template";
|
||||
import { Dmp } from "@app/core/model/dmp/dmp";
|
||||
import { DmpBlueprintService } from "@app/core/services/dmp/dmp-blueprint.service";
|
||||
import { PrefillingService } from "@app/core/services/prefilling.service";
|
||||
import { PrefillingSourceService } from "@app/core/services/prefilling-source/prefilling-source.service";
|
||||
import { ProgressIndicationService } from "@app/core/services/progress-indication/progress-indication-service";
|
||||
import { BaseComponent } from "@common/base/base.component";
|
||||
import { FormService } from "@common/forms/form-service";
|
||||
import { Guid } from "@common/types/guid";
|
||||
import { TranslateService } from "@ngx-translate/core";
|
||||
import { UUID } from "crypto";
|
||||
|
@ -26,21 +28,22 @@ export class PrefillDescriptionDialogComponent extends BaseComponent implements
|
|||
|
||||
dmp: Dmp;
|
||||
dmpSectionId: Guid;
|
||||
availableDescriptionTempaltes: DescriptionTemplate[] = [];
|
||||
availableDescriptionTemplates: DescriptionTemplate[] = [];
|
||||
|
||||
constructor(public dialogRef: MatDialogRef<PrefillDescriptionDialogComponent>,
|
||||
// private prefillingService: PrefillingService,
|
||||
// private dmpBlueprintService: DmpBlueprintService,
|
||||
// private dialog: MatDialog,
|
||||
// private language: TranslateService,
|
||||
private progressIndicationService: ProgressIndicationService,
|
||||
private fb: UntypedFormBuilder,
|
||||
public prefillingSourceService: PrefillingSourceService,
|
||||
private formService: FormService,
|
||||
@Inject(MAT_DIALOG_DATA) public data: any) {
|
||||
super();
|
||||
|
||||
this.dmp = data.dmp;
|
||||
this.dmpSectionId = data.dmpSectionId;
|
||||
this.availableDescriptionTempaltes = this.dmp.dmpDescriptionTemplates.filter(x => x.sectionId == this.dmpSectionId).map(x => x.currentDescriptionTemplate);
|
||||
this.availableDescriptionTemplates = this.dmp.dmpDescriptionTemplates.filter(x => x.sectionId == this.dmpSectionId).map(x => x.currentDescriptionTemplate);
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
@ -49,8 +52,8 @@ export class PrefillDescriptionDialogComponent extends BaseComponent implements
|
|||
});
|
||||
this.prefillForm = this.fb.group({
|
||||
type: this.fb.control(false),
|
||||
descriptionTempalte: this.fb.control('', Validators.required),
|
||||
prefill: this.fb.control(null, Validators.required)
|
||||
descriptionTemplateId: this.fb.control(null, Validators.required),
|
||||
prefillingSourceId: this.fb.control(null, Validators.required)
|
||||
})
|
||||
// if (this.data.availableProfiles && this.data.availableProfiles.length === 1) {
|
||||
// this.addProfileIfUsedLessThanMax(this.data.availableProfiles[0]);
|
||||
|
@ -196,6 +199,12 @@ export class PrefillDescriptionDialogComponent extends BaseComponent implements
|
|||
// } else {
|
||||
// this.closeDialog();
|
||||
// }
|
||||
const formData = this.formService.getValue(this.prefillForm.value) as DescriptionProfilingRequest;
|
||||
|
||||
this.prefillingSourceService.generate(formData)
|
||||
.pipe(takeUntil(this._destroyed)).subscribe(
|
||||
);
|
||||
this.closeDialog();
|
||||
}
|
||||
|
||||
closeDialog(result = null): void {
|
||||
|
|
|
@ -1066,6 +1066,7 @@
|
|||
"OR": "OR",
|
||||
"HINT": "Select the dataset from Zenodo to automatically retrieve answers to some questions in your template or start by answering the questions manually.",
|
||||
"DESCRIPTION-TEMPLATE": "Description Template",
|
||||
"PREFILLING-SOURCE": "Prefilling Source",
|
||||
"SEARCH-HEADER": "Prefilled object",
|
||||
"SEARCH": "Start typing to search for an entity to use for prefilling",
|
||||
"ACTIONS": {
|
||||
|
|
Loading…
Reference in New Issue