diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java index bbc9f944e..72d0c2533 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java @@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import eu.eudat.models.data.quickwizard.DatasetCreateWizardModel; import javax.transaction.Transactional; import javax.validation.Valid; @@ -58,4 +59,16 @@ public class QuickWizardController extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Created")); } + + + @RequestMapping(method = RequestMethod.POST, value = {"/datasetcreate"}, consumes = "application/json", produces = "application/json") + public @ResponseBody + ResponseEntity> addDatasetWizard(@RequestBody DatasetCreateWizardModel datasetCreateWizardModel, Principal principal) throws Exception{ + for(DatasetDescriptionQuickWizardModel dataset : datasetCreateWizardModel.getDatasets().getDatasetsList()){ + this.datasetManager.createOrUpdate(this.getApiContext(), dataset.toDataModel(datasetCreateWizardModel.getDmpMeta().getDmp(), datasetCreateWizardModel.getDmpMeta().getDatasetProfile().getId()), principal); + } + + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Dataset added!")); + } + } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DatasetCreateWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DatasetCreateWizardModel.java new file mode 100644 index 000000000..f607cbbd6 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DatasetCreateWizardModel.java @@ -0,0 +1,19 @@ +package eu.eudat.models.data.quickwizard; + +import eu.eudat.data.entities.DMP; + +public class DatasetCreateWizardModel { + + private DmpCreateWizardModel dmpMeta; + private DatasetQuickWizardModel datasets; + + public DmpCreateWizardModel getDmpMeta() { return dmpMeta; } + public void setDmpMeta(DmpCreateWizardModel dmpMeta) { this.dmpMeta = dmpMeta; } + + public DatasetQuickWizardModel getDatasets() { + return datasets; + } + public void setDatasets(DatasetQuickWizardModel datasets) { + this.datasets = datasets; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DatasetProfileCreateWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DatasetProfileCreateWizardModel.java new file mode 100644 index 000000000..9efd07500 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DatasetProfileCreateWizardModel.java @@ -0,0 +1,14 @@ +package eu.eudat.models.data.quickwizard; + +import java.util.UUID; + +public class DatasetProfileCreateWizardModel { + private UUID id; + private String label; + + 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; } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpCreateWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpCreateWizardModel.java new file mode 100644 index 000000000..a1330ae94 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpCreateWizardModel.java @@ -0,0 +1,17 @@ +package eu.eudat.models.data.quickwizard; + +import eu.eudat.data.entities.DMP; +import eu.eudat.models.data.dmp.DataManagementPlan; + +public class DmpCreateWizardModel { + private DatasetProfileCreateWizardModel datasetProfile; + private DataManagementPlan dmp; + + public DatasetProfileCreateWizardModel getDatasetProfile() {return datasetProfile; } + public void setDatasetProfile(DatasetProfileCreateWizardModel datasetProfileCreateWizardModel) { + this.datasetProfile = datasetProfileCreateWizardModel; + } + + public DataManagementPlan getDmp() { return dmp; } + public void setDmp(DataManagementPlan dmp) { this.dmp = dmp; } +} diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index 7194e0881..c74794404 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -11,6 +11,13 @@ const appRoutes: Routes = [ }, pathMatch: 'full' }, + { + path: 'datasetcreatewizard', + loadChildren: './ui/dataset-create-wizard/dataset-create-wizard.module#DatasetCreateWizardModule', + data: { + breadcrumb: true + } + }, { path: 'explore', loadChildren: './ui/explore-dataset/explore-dataset.module#ExploreDatasetModule', diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index 4ab2ba01e..b3eff9887 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -19,7 +19,8 @@ import { BreadcrumbModule } from './ui/misc/breadcrumb/breadcrumb.module'; import { HelpContentModule } from './ui/misc/help-content/help-content.module'; import { NavigationModule } from './ui/misc/navigation/navigation.module'; import { LoginModule } from './ui/auth/login/login.module'; -import { QuickWizardRoutingModule } from './ui/quick-wizard/quick-wizard.rooting'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { DatasetCreateWizardModule } from './ui/dataset-create-wizard/dataset-create-wizard.module'; // AoT requires an exported function for factories export function HttpLoaderFactory(http: HttpClient) { @@ -49,10 +50,13 @@ export function HttpLoaderFactory(http: HttpClient) { NotificationModule, NavigationModule, BreadcrumbModule, - HelpContentModule + HelpContentModule, + ReactiveFormsModule, + FormsModule, + DatasetCreateWizardModule, ], declarations: [ - AppComponent + AppComponent, ], providers: [ { diff --git a/dmp-frontend/src/app/core/core-service.module.ts b/dmp-frontend/src/app/core/core-service.module.ts index a62f09985..d482bb9e3 100644 --- a/dmp-frontend/src/app/core/core-service.module.ts +++ b/dmp-frontend/src/app/core/core-service.module.ts @@ -32,6 +32,7 @@ import { UserService } from './services/user/user.service'; import { CollectionUtils } from './services/utilities/collection-utils.service'; import { TypeUtils } from './services/utilities/type-utils.service'; import { QuickWizardService } from './services/quick-wizard/quick-wizard.service'; +import { QuickDatasetCreateWizardService } from './services/dataset-create-wizard/quick-dataset-create-wizard.service'; // // // This is shared module that provides all the services. Its imported only once on the AppModule. @@ -83,7 +84,8 @@ export class CoreServiceModule { UserService, DmpInvitationService, DatasetExternalAutocompleteService, - QuickWizardService + QuickWizardService, + QuickDatasetCreateWizardService ], }; } diff --git a/dmp-frontend/src/app/core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model.ts b/dmp-frontend/src/app/core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model.ts new file mode 100644 index 000000000..f53ef7d9c --- /dev/null +++ b/dmp-frontend/src/app/core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model.ts @@ -0,0 +1,42 @@ +import { DmpModel } from "../dmp" +import { DatasetProfileModel } from "../../dataset/dataset-profile"; +import { FormGroup } from "@angular/forms/src/model"; +import { ValidationContext } from "../../../../common/forms/validation/validation-context"; +import { Validators, FormBuilder } from "@angular/forms"; +import { BackendErrorValidator } from "../../../../common/forms/validation/custom-validator"; +import { ValidationErrorModel } from "../../../../common/forms/validation/error-model/validation-error-model"; + +export class DmpCreateWizardFormModel { + dmp: DmpModel; + datasetProfile: DatasetProfileModel; + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); + + fromModel(item: DmpCreateWizardFormModel): DmpCreateWizardFormModel { + this.dmp = item.dmp; + this.datasetProfile = item.datasetProfile; + + return this; + } + + buildForm(context: ValidationContext = null): FormGroup{ + if (context == null) { context = this.createValidationContext(); } + const formBuilder = new FormBuilder(); + const formGroup = formBuilder.group({ + dmp: [this.dmp, context.getValidation('dmp').validators], + datasetProfile: [this.datasetProfile, context.getValidation('datasetProfile').validators], + }); + + return formGroup; + } + + createValidationContext(): ValidationContext { + const baseContext: ValidationContext = new ValidationContext(); + baseContext.validation.push({ key: 'datasetProfile', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'datasetProfile')] }); + baseContext.validation.push({ key: 'dmp', validators: [BackendErrorValidator(this.validationErrorModel, 'dmp')] }); + + return baseContext; + } +} + + + diff --git a/dmp-frontend/src/app/core/services/quick-wizard/quick-wizard.service.ts b/dmp-frontend/src/app/core/services/quick-wizard/quick-wizard.service.ts index 8ff730f97..22a01c59c 100644 --- a/dmp-frontend/src/app/core/services/quick-wizard/quick-wizard.service.ts +++ b/dmp-frontend/src/app/core/services/quick-wizard/quick-wizard.service.ts @@ -4,8 +4,7 @@ import { Observable } from 'rxjs'; import { environment } from '../../../../environments/environment'; import { QuickWizardEditorWizardModel } from '../../../ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.model'; import { BaseHttpService } from '../http/base-http.service'; - - +import { DatasetCreateWizardModel } from '../../../ui/dataset-create-wizard/dataset-create-wizard.model'; @Injectable() export class QuickWizardService { @@ -16,11 +15,11 @@ export class QuickWizardService { this.actionUrl = environment.Server + 'quick-wizard/'; } - - createQuickWizard(quickWizard: QuickWizardEditorWizardModel): Observable { return this.http.post(this.actionUrl, quickWizard, { headers: this.headers }); - } + } - -} \ No newline at end of file + createQuickDatasetWizard(datasetCreateWizardModel: DatasetCreateWizardModel): Observable { + return this.http.post(this.actionUrl + '/datasetcreate', datasetCreateWizardModel, { headers: this.headers }); + } +} diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.html b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.html new file mode 100644 index 000000000..d8c7ea9e8 --- /dev/null +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.html @@ -0,0 +1,33 @@ +
+ + + {{'DATASET-CREATE-WIZARD.FIRST-STEP.TITLE'| translate}} +
+ +
+
+
+
+
+ +
+
+
+
+ + + {{'QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.THIRD-STEP.TITLE' | translate}} + +
+ + + +
+ +
+
+
diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.scss b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts new file mode 100644 index 000000000..802815481 --- /dev/null +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts @@ -0,0 +1,46 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { Observable } from 'rxjs'; +import { MatStepper } from '@angular/material'; +import { BaseComponent } from '../../core/common/base/base.component'; +import { TranslateService } from '@ngx-translate/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { DatasetCreateWizardModel } from './dataset-create-wizard.model'; +import { Router } from '@angular/router/src/router'; +import { QuickWizardService } from '../../core/services/quick-wizard/quick-wizard.service'; + +@Component({ + selector: 'dataset-create-wizard.component', + templateUrl: 'dataset-create-wizard.component.html', + styleUrls: ['./dataset-create-wizard.component.scss'], +}) +export class DatasetCreateWizard extends BaseComponent implements OnInit { + isLinear = false; + formGroup: FormGroup; + router: Router; + + datasetCreateWizardModel: DatasetCreateWizardModel; + @ViewChild('stepper') stepper: MatStepper; + + constructor( + private formBuilder: FormBuilder, + public quickWizardService: QuickWizardService, + ) { + super(); + } + + ngOnInit() { + this.datasetCreateWizardModel = new DatasetCreateWizardModel(); + this.formGroup = this.datasetCreateWizardModel.buildForm(); + } + + save() { + this.submit(); + } + + submit() { + this.quickWizardService.createQuickDatasetWizard(this.formGroup.value) + .subscribe(data => { + this.router.navigateByUrl(''); + }) + } +} diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.model.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.model.ts new file mode 100644 index 000000000..8bc4a8a7d --- /dev/null +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.model.ts @@ -0,0 +1,47 @@ +import { DatasetDmpSelectorModel } from "./dmp-selector/dataset-dmp-selector.model"; +import { DmpModel } from "../../core/model/dmp/dmp"; +import { FormGroup, FormBuilder, Validators } from "@angular/forms"; +import { DatasetProfileModel } from "../../core/model/dataset/dataset-profile"; +import { ValidationContext } from "../../common/forms/validation/validation-context"; +import { BackendErrorValidator } from "../../common/forms/validation/custom-validator"; +import { ValidationErrorModel } from "../../common/forms/validation/error-model/validation-error-model"; +import { DmpCreateWizardFormModel } from "../../core/model/dmp/dmp-create-wizard/dmp-create-wizard-form.model"; +import { DatasetEditorWizardModel } from "../quick-wizard/dataset-editor/dataset-editor-wizard-model"; +import { DatasetWizardEditorModel } from "../dataset/dataset-wizard/dataset-wizard-editor.model"; + +import { DmpEditorWizardModel } from "../quick-wizard/dmp-editor/dmp-editor-wizard-model"; + +export class DatasetCreateWizardModel { + public dmpMeta: DmpCreateWizardFormModel; + public datasets: DatasetEditorWizardModel; + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); + + fromModelDmp(item: DmpCreateWizardFormModel): DatasetCreateWizardModel { + this.dmpMeta.fromModel(item); + return this; + } + + fromModelDataset(item: DatasetWizardEditorModel[]): DatasetCreateWizardModel { + this.datasets.fromModel(item); + return this; + } + + buildForm(context: ValidationContext = null): FormGroup { + if (context == null) { context = this.createValidationContext(); } + const formBuilder = new FormBuilder(); + const formGroup = formBuilder.group({ + dmpMeta: new DmpCreateWizardFormModel().buildForm(), + datasets: new DatasetEditorWizardModel().buildForm() + }); + + return formGroup; + } + + createValidationContext(): ValidationContext { + const baseContext: ValidationContext = new ValidationContext(); + baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] }); + baseContext.validation.push({ key: 'status', validators: [BackendErrorValidator(this.validationErrorModel, 'status')] }); + + return baseContext; + } +} diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.module.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.module.ts new file mode 100644 index 000000000..54d9bb5f2 --- /dev/null +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.module.ts @@ -0,0 +1,41 @@ +import { NgModule } from '@angular/core'; +import { DatasetCreateWizard } from './dataset-create-wizard.component'; +import { DatasetCreateWizardRoutingModule } from './dataset-create-wizard.routing'; +import { CommonUiModule } from '../../common/ui/common-ui.module'; +import { CommonFormsModule } from '../../common/forms/common-forms.module'; +import { AutoCompleteModule } from '../../library/auto-complete/auto-complete.module'; +import { DatasetDmpSelector } from './dmp-selector/dataset-dmp-selector.component'; +import { FormattingModule } from '../../core/formatting.module'; +import { DatasetEditorWizardComponent } from '../quick-wizard/dataset-editor/dataset-editor-wizard.component'; +//import { DatasetDescriptionFormComponent } from '../misc/dataset-description-form/dataset-description-form.component'; +//import { FormProgressIndicationComponent } from '../misc/dataset-description-form/components/form-progress-indication/form-progress-indication.component'; +import { UrlListingModule } from '../../library/url-listing/url-listing.module'; +import { ConfirmationDialogModule } from '../../library/confirmation-dialog/confirmation-dialog.module'; +import { DatasetDescriptionFormModule } from '../misc/dataset-description-form/dataset-description-form.module'; +import { QuickWizardRoutingModule } from '../quick-wizard/quick-wizard.rooting'; +import { OuickWizardModule } from '../quick-wizard/quick-wizard.module'; +import { CoreServiceModule } from '../../core/core-service.module'; + + +@NgModule({ + imports: [ + DatasetCreateWizardRoutingModule, + CommonUiModule, + CommonFormsModule, + AutoCompleteModule, + FormattingModule, + UrlListingModule, + ConfirmationDialogModule, + QuickWizardRoutingModule, + DatasetDescriptionFormModule, + OuickWizardModule, + + ], + declarations: [ + DatasetCreateWizard, + DatasetDmpSelector, + ], + entryComponents: [ + ] +}) +export class DatasetCreateWizardModule { } diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.routing.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.routing.ts new file mode 100644 index 000000000..63689111c --- /dev/null +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.routing.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { DatasetCreateWizard } from './dataset-create-wizard.component'; +import { DatasetDmpSelector } from './dmp-selector/dataset-dmp-selector.component'; + +const routes: Routes = [ + { + path: '', + component: DatasetCreateWizard, + data: { + breadcrumb: true + }, + }, + { + path: '', + component: DatasetDmpSelector, + data: { + breadcrumb: true + }, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DatasetCreateWizardRoutingModule { } diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.html b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.html new file mode 100644 index 000000000..1e323abbe --- /dev/null +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.html @@ -0,0 +1,14 @@ +
+ + + + + + + + {{datasetProfile.label}} + + + +
diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.scss b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.ts new file mode 100644 index 000000000..9f623a8c7 --- /dev/null +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.component.ts @@ -0,0 +1,89 @@ +import { Component, OnInit, ViewChild, Input } from '@angular/core'; +import { BaseComponent } from '../../../core/common/base/base.component'; +import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; +import { Observable } from 'rxjs'; +import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; +import { MatStepper, MatSnackBar } from '@angular/material'; +import { FormGroup } from '@angular/forms'; +import { DatasetProfileModel } from '../../../core/model/dataset/dataset-profile'; +import { takeUntil } from 'rxjs/operators'; +import { RequestItem } from '../../../core/query/request-item'; +import { DmpCriteria } from '../../../core/query/dmp/dmp-criteria'; +import { Params, ActivatedRoute, Router } from '@angular/router'; +import { DatasetProfileCriteria } from '../../../core/query/dataset-profile/dataset-profile-criteria'; +import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; +import { DmpListingModel } from '../../../core/model/dmp/dmp-listing'; +import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; +import { SingleAutoCompleteConfiguration } from '../../../library/auto-complete/single/single-auto-complete-configuration'; +import { DatasetWizardService } from '../../../core/services/dataset-wizard/dataset-wizard.service'; +import { TranslateService } from '@ngx-translate/core'; +import { DmpService } from '../../../core/services/dmp/dmp.service'; +import { FormControl } from '@angular/forms/src/model'; + +@Component({ + selector: 'dataset-dmp-selector-component', + templateUrl: 'dataset-dmp-selector.component.html', + styleUrls: ['./dataset-dmp-selector.component.scss'], +}) + +export class DatasetDmpSelector extends BaseComponent implements OnInit, IBreadCrumbComponent { + + breadCrumbs: Observable; + dmpAutoCompleteConfiguration: SingleAutoCompleteConfiguration; + @Input() formGroup: FormGroup; + formControl: FormControl; + availableProfiles: DatasetProfileModel[] = []; + + constructor( + private router: Router, + private route: ActivatedRoute, + public dmpService: DmpService, + private datasetWizardService: DatasetWizardService, + ) { + super(); + } + + ngOnInit() { + this.dmpAutoCompleteConfiguration = { + filterFn: this.searchDmp.bind(this), + initialItems: (extraData) => this.searchDmp(''), + displayFn: (item) => item['label'], + titleFn: (item) => item['label'], + }; + + this.formGroup.get('dmp').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => { + if (x) { this.loadDatasetProfiles(); } + else { + this.availableProfiles = []; + this.formGroup.get('datasetProfile').reset(); + } + }); + } + + searchDmp(query: string): Observable { + const fields: Array = new Array(); + fields.push('asc'); + const dmpDataTableRequest: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + dmpDataTableRequest.criteria = new DmpCriteria(); + dmpDataTableRequest.criteria.like = query; + //const dmpListingModel = + + return this.dmpService.getPaged(dmpDataTableRequest, "autocomplete") + .map(x => x.data); + } + + loadDatasetProfiles() { + const datasetProfileRequestItem: RequestItem = new RequestItem(); + datasetProfileRequestItem.criteria = new DatasetProfileCriteria(); + datasetProfileRequestItem.criteria.id = this.formGroup.get('dmp').value.id; + if (datasetProfileRequestItem.criteria.id) { + this.datasetWizardService.getAvailableProfiles(datasetProfileRequestItem) + .pipe(takeUntil(this._destroyed)) + .subscribe(items => { + this.availableProfiles = items; + }); + } + } +} diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.model.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.model.ts new file mode 100644 index 000000000..0d61eb041 --- /dev/null +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dmp-selector/dataset-dmp-selector.model.ts @@ -0,0 +1,7 @@ +import { DmpModel } from "../../../core/model/dmp/dmp"; +import { DatasetProfileModel } from "../../../core/model/dataset/dataset-profile"; + +export class DatasetDmpSelectorModel{ + label?: string; + status?: number; +} diff --git a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard-model.ts b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard-model.ts index c970224c5..158768bff 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard-model.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard-model.ts @@ -6,13 +6,14 @@ import { ValidationContext } from "../../../common/forms/validation/validation-c import { FormBuilder, FormGroup, Validators } from "@angular/forms"; import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; import { ValidJsonValidator } from "../../../library/auto-complete/auto-complete-custom-validator"; +import { DatasetProfileModel } from "../../../core/model/dataset/dataset-profile"; export class DmpEditorWizardModel { public id: string; public label: string; public status: Status = Status.Active; public description: String; - public profile: DmpProfile; + public datasetProfile: DatasetProfileModel; public definition: DmpProfileDefinition; public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); @@ -21,7 +22,7 @@ export class DmpEditorWizardModel { this.label = item.label; this.status = item.status; this.description = item.description; - this.profile = item.profiles[0]; + this.datasetProfile = item.profiles[0]; return this; } @@ -32,7 +33,7 @@ export class DmpEditorWizardModel { label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], - profile: [{ value: this.profile, disabled: disabled }, context.getValidation('profile').validators], + datasetProfile: [{ value: this.datasetProfile, disabled: disabled }, context.getValidation('datasetProfile').validators], }); return formGroup; } @@ -43,7 +44,7 @@ export class DmpEditorWizardModel { baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] }); baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'status')] }); baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'description')] }); - baseContext.validation.push({ key: 'profile', validators: [Validators.required, ValidJsonValidator, BackendErrorValidator(this.validationErrorModel, 'profile')] }); + baseContext.validation.push({ key: 'datasetProfile', validators: [Validators.required, ValidJsonValidator, BackendErrorValidator(this.validationErrorModel, 'datasetProfile')] }); return baseContext; } } diff --git a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.html b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.html index 942d97284..1c09d58c9 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.html +++ b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.html @@ -27,13 +27,13 @@ translate}} - - - {{formGroup.get('profile').getError('backendError').message}} - + + {{formGroup.get('datasetProfile').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}}