From ab8022d13381f283138c8f4cce48a435c3578fba Mon Sep 17 00:00:00 2001 From: dtziotzios Date: Tue, 5 Mar 2019 13:21:04 +0200 Subject: [PATCH 1/3] QuickWizard Fix Merge Component And Fix Thi InitSteper --- .../controllers/QuickWizardController.java | 41 +++++-- .../logic/managers/QuickWizardManager.java | 20 +++- .../data/quickwizard/DmpQuickWizardModel.java | 6 +- .../quickwizard/ProjectQuickWizardModel.java | 49 ++++----- .../src/app/core/core-service.module.ts | 2 - .../quick-wizard-create-add.component.ts | 2 +- .../dataset-create-wizard.component.html | 22 ++-- .../dataset-create-wizard.component.ts | 19 +++- .../dataset-create-wizard.model.ts | 16 +-- .../dataset-create-wizard.module.ts | 22 ++-- .../dataset-wizard.component.ts | 4 +- .../app/ui/dmp/editor/dmp-editor.component.ts | 7 +- .../dataset-editor-wizard-model.ts | 8 +- .../dataset-editor-wizard.component.html | 3 +- .../dataset-editor-wizard.component.ts | 104 ++++++++++-------- .../dmp-editor/dmp-editor-wizard.component.ts | 9 +- .../project-editor-wizard-model.ts | 7 ++ .../project-editor-wizard.component.html | 88 +++++++++------ .../project-editor-wizard.component.ts | 94 +++++++++++----- .../quick-wizard-editor.component.html | 51 +++++---- .../quick-wizard-editor.component.ts | 37 ++++--- .../quick-wizard-editor.model.ts | 19 ++-- dmp-frontend/src/assets/i18n/en.json | 14 ++- 23 files changed, 375 insertions(+), 269 deletions(-) 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 72d0c2533..afbc7724a 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 @@ -16,21 +16,24 @@ import eu.eudat.models.data.quickwizard.DatasetCreateWizardModel; import javax.transaction.Transactional; import javax.validation.Valid; + @RestController @CrossOrigin @RequestMapping(value = {"/api/quick-wizard/"}) public class QuickWizardController extends BaseController { private QuickWizardManager quickWizardManager; + private ProjectManager projectManager; private DatasetManager datasetManager; @Autowired - public QuickWizardController(ApiContext apiContext, QuickWizardManager quickWizardManager,DatasetManager datasetManager) { + public QuickWizardController(ApiContext apiContext, QuickWizardManager quickWizardManager, DatasetManager datasetManager, ProjectManager projectManager) { super(apiContext); this.quickWizardManager = quickWizardManager; this.datasetManager = datasetManager; + this.projectManager = projectManager; } @@ -38,24 +41,38 @@ public class QuickWizardController extends BaseController { @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public @ResponseBody ResponseEntity> addQuickWizardModel(@Valid @RequestBody QuickWizardModel quickWizard, Principal principal) throws Exception { - + eu.eudat.data.entities.Project projectEntity; //Create Project - eu.eudat.data.entities.Project projectEntity = this.quickWizardManager.createOrUpdate(this.getApiContext().getOperationsContext().getFileStorageService(), - this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao(), - this.getApiContext().getOperationsContext().getDatabaseRepository().getContentDao(), - this.getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao(), - quickWizard.getProject().toDataProject(), principal); - + if (quickWizard.getProject().getExistProject() == null) { + projectEntity = this.quickWizardManager.createOrUpdate(this.getApiContext().getOperationsContext().getFileStorageService(), + this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao(), + this.getApiContext().getOperationsContext().getDatabaseRepository().getContentDao(), + this.getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao(), + quickWizard.getProject().toDataProject(), principal); + } else { + projectEntity = quickWizard.getProject().getExistProject().toDataModel(); + } //Create Dmp - eu.eudat.data.entities.DMP dmpEntity = this.quickWizardManager.createOrUpdate(this.getApiContext(), quickWizard.getDmp().toDataDmp(projectEntity), principal); + eu.eudat.data.entities.DMP dmpEntity = this.quickWizardManager.createOrUpdate( + this.getApiContext(), + quickWizard.getDmp().toDataDmp( + this.getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao(), + projectEntity, + principal), + principal); //Create Datasets quickWizard.getDmp().setId(dmpEntity.getId()); - for(DatasetDescriptionQuickWizardModel dataset : quickWizard.getDatasets().getDatasetsList()){ - this.datasetManager.createOrUpdate(this.getApiContext(), dataset.toDataModel(quickWizard.getDmp().toDataDmp(projectEntity),quickWizard.getDmp().getDatasetProfile().getId()), principal); + for (DatasetDescriptionQuickWizardModel dataset : quickWizard.getDatasets().getDatasetsList()) { + this.datasetManager.createOrUpdate(this.getApiContext(), dataset.toDataModel(quickWizard.getDmp().toDataDmp( + this.getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao(), + projectEntity, + principal), + quickWizard.getDmp().getDatasetProfile().getId()), + principal); } - + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Created")); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java index 0d3932f82..ea0bac384 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java @@ -1,5 +1,6 @@ package eu.eudat.logic.managers; +import eu.eudat.data.dao.criteria.ProjectCriteria; import eu.eudat.data.dao.entities.ContentDao; import eu.eudat.data.dao.entities.ProjectDao; import eu.eudat.data.dao.entities.UserInfoDao; @@ -29,19 +30,26 @@ public class QuickWizardManager { public DMP createOrUpdate(ApiContext apiContext, DataManagementPlan dataManagementPlan, Principal principal) throws Exception { DMP newDmp = dataManagementPlan.toDataModel(); UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); + createProjectIfItDoesntExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getProjectDao(), user); newDmp.setCreator(user); DMP dmpret = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); return dmpret; } - /*public void createOrUpdate(ApiContext apiContext, DatasetDao datasetRepository,DMP dmp, eu.eudat.data.entities.DatasetProfile profile , DatasetQuickWizardModel datasetwrapper, Principal principal) throws Exception { - for (DatasetDescriptionQuickWizardModel dataset :datasetwrapper.getDatasetsList()){ - datasetRepository.createOrUpdate(dataset.toDataModel(dmp,profile)); + private void createProjectIfItDoesntExist(DMP newDmp, ProjectDao projectDao, UserInfo userInfo) { + if (newDmp.getProject() != null) { + Project project = newDmp.getProject(); + ProjectCriteria criteria = new ProjectCriteria(); + criteria.setReference(project.getReference()); + eu.eudat.data.entities.Project projectEntity = projectDao.getWithCriteria(criteria).getSingleOrDefault(); + if (projectEntity != null) project.setId(projectEntity.getId()); + else { + project.setType(Project.ProjectType.EXTERNAL.getValue()); + projectDao.createOrUpdate(project); + } } - - }*/ - + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpQuickWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpQuickWizardModel.java index 1e443eaed..757cdfcd8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpQuickWizardModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/DmpQuickWizardModel.java @@ -1,7 +1,9 @@ package eu.eudat.models.data.quickwizard; +import eu.eudat.data.dao.entities.UserInfoDao; import eu.eudat.data.entities.Project; import eu.eudat.models.data.dmp.AssociatedProfile; +import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.userinfo.UserInfo; import java.util.Date; @@ -67,7 +69,7 @@ public class DmpQuickWizardModel { this.project = project; } - public eu.eudat.models.data.dmp.DataManagementPlan toDataDmp(Project project) { + public eu.eudat.models.data.dmp.DataManagementPlan toDataDmp(UserInfoDao userInfoRepository ,Project project, Principal principal) { eu.eudat.models.data.dmp.DataManagementPlan dataManagementPlanEntity = new eu.eudat.models.data.dmp.DataManagementPlan(); dataManagementPlanEntity.setId(this.id); @@ -89,7 +91,7 @@ public class DmpQuickWizardModel { dataManagementPlanEntity.setCreated(new Date()); List user = new LinkedList(); eu.eudat.models.data.userinfo.UserInfo usetInfo = new eu.eudat.models.data.userinfo.UserInfo(); - usetInfo.fromDataModel(project.getCreationUser()); + usetInfo.fromDataModel(userInfoRepository.find(principal.getId())); user.add(usetInfo); dataManagementPlanEntity.setAssociatedUsers(user); return dataManagementPlanEntity; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/ProjectQuickWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/ProjectQuickWizardModel.java index b0c16f29a..4767b4442 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/ProjectQuickWizardModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/ProjectQuickWizardModel.java @@ -1,24 +1,18 @@ package eu.eudat.models.data.quickwizard; +import eu.eudat.models.data.project.Project; + import java.util.Date; import java.util.UUID; public class ProjectQuickWizardModel { - private UUID id; private String label; - private eu.eudat.data.entities.Project.Status status; private String description; + private Project existProject; - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } public String getLabel() { return label; @@ -28,15 +22,6 @@ public class ProjectQuickWizardModel { this.label = label; } - public short getStatus() { - return status.getValue(); - } - - public void setStatus(Short status) { - this.status = eu.eudat.data.entities.Project.Status.fromInteger(status); - } - - public String getDescription() { return description; } @@ -46,19 +31,23 @@ public class ProjectQuickWizardModel { } + public Project getExistProject() { + return existProject; + } + + public void setExistProject(Project existProject) { + this.existProject = existProject; + } + public eu.eudat.models.data.project.Project toDataProject(){ - eu.eudat.models.data.project.Project toProject = new eu.eudat.models.data.project.Project(); - toProject.setId(this.id); - toProject.setAbbreviation(""); - toProject.setLabel(this.label); - toProject.setReference("dmp:" + this.label); - toProject.setUri(""); - toProject.setDefinition(""); - toProject.setCreated(new Date()); - toProject.setStatus(this.status != null ? this.getStatus() : eu.eudat.data.entities.Project.Status.ACTIVE.getValue()); - toProject.setModified(new Date()); - toProject.setDescription(this.description); - return toProject; + eu.eudat.models.data.project.Project toProject = new eu.eudat.models.data.project.Project(); + toProject.setAbbreviation(""); + toProject.setLabel(this.label); + toProject.setReference("dmp:" + this.label); + toProject.setUri(""); + toProject.setDefinition(""); + toProject.setDescription(this.description); + return toProject; } } diff --git a/dmp-frontend/src/app/core/core-service.module.ts b/dmp-frontend/src/app/core/core-service.module.ts index d482bb9e3..93ec38742 100644 --- a/dmp-frontend/src/app/core/core-service.module.ts +++ b/dmp-frontend/src/app/core/core-service.module.ts @@ -32,7 +32,6 @@ 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. @@ -85,7 +84,6 @@ export class CoreServiceModule { DmpInvitationService, DatasetExternalAutocompleteService, QuickWizardService, - QuickDatasetCreateWizardService ], }; } diff --git a/dmp-frontend/src/app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component.ts b/dmp-frontend/src/app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component.ts index 018741525..ebcfc399f 100644 --- a/dmp-frontend/src/app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/quick-wizard-create-add/quick-wizard-create-add.component.ts @@ -33,7 +33,7 @@ export class QuickWizardCreateAdd extends BaseComponent implements OnInit { navigateToAdd(){ - this.router.navigate(["/quick-wizard-add"]); + this.router.navigate(["/datasetcreatewizard"]); } 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 index d8c7ea9e8..4cdaad652 100644 --- 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 @@ -3,13 +3,15 @@ {{'DATASET-CREATE-WIZARD.FIRST-STEP.TITLE'| translate}}
- + +
- +
@@ -18,16 +20,18 @@ {{'QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.THIRD-STEP.TITLE' | translate}} -
- +
+ -
-
+ \ No newline at end of file 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 index 802815481..4ac3c3985 100644 --- 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 @@ -1,12 +1,10 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { Observable } from 'rxjs'; +import { FormBuilder, FormGroup } from '@angular/forms'; 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 { BaseComponent } from '../../core/common/base/base.component'; import { QuickWizardService } from '../../core/services/quick-wizard/quick-wizard.service'; +import { DatasetCreateWizardModel } from './dataset-create-wizard.model'; @Component({ selector: 'dataset-create-wizard.component', @@ -40,7 +38,16 @@ export class DatasetCreateWizard extends BaseComponent implements OnInit { submit() { this.quickWizardService.createQuickDatasetWizard(this.formGroup.value) .subscribe(data => { - this.router.navigateByUrl(''); + this.router.navigateByUrl('/create-add'); }) } + + isAvtive(step: string): boolean { + switch (step) { + case 'step1': + return this.stepper.selectedIndex==0; + case 'step2': + return this.stepper.selectedIndex==1; + } + } } 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 index 8bc4a8a7d..a0ef11de6 100644 --- 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 @@ -1,19 +1,15 @@ -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 { FormBuilder, FormGroup, Validators } from "@angular/forms"; import { BackendErrorValidator } from "../../common/forms/validation/custom-validator"; import { ValidationErrorModel } from "../../common/forms/validation/error-model/validation-error-model"; +import { ValidationContext } from "../../common/forms/validation/validation-context"; 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 { DatasetEditorWizardModel } from "../quick-wizard/dataset-editor/dataset-editor-wizard-model"; -import { DmpEditorWizardModel } from "../quick-wizard/dmp-editor/dmp-editor-wizard-model"; export class DatasetCreateWizardModel { - public dmpMeta: DmpCreateWizardFormModel; - public datasets: DatasetEditorWizardModel; + public dmpMeta: DmpCreateWizardFormModel; + public datasets: DatasetEditorWizardModel; public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); fromModelDmp(item: DmpCreateWizardFormModel): DatasetCreateWizardModel { @@ -31,7 +27,7 @@ export class DatasetCreateWizardModel { const formBuilder = new FormBuilder(); const formGroup = formBuilder.group({ dmpMeta: new DmpCreateWizardFormModel().buildForm(), - datasets: new DatasetEditorWizardModel().buildForm() + datasets: new DatasetEditorWizardModel().buildForm() }); return formGroup; 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 index 54d9bb5f2..dbb004455 100644 --- 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 @@ -1,20 +1,16 @@ import { NgModule } from '@angular/core'; +import { CommonFormsModule } from '../../common/forms/common-forms.module'; +import { CommonUiModule } from '../../common/ui/common-ui.module'; +import { FormattingModule } from '../../core/formatting.module'; +import { AutoCompleteModule } from '../../library/auto-complete/auto-complete.module'; +import { ConfirmationDialogModule } from '../../library/confirmation-dialog/confirmation-dialog.module'; +import { UrlListingModule } from '../../library/url-listing/url-listing.module'; +import { DatasetDescriptionFormModule } from '../misc/dataset-description-form/dataset-description-form.module'; +import { OuickWizardModule } from '../quick-wizard/quick-wizard.module'; +import { QuickWizardRoutingModule } from '../quick-wizard/quick-wizard.rooting'; 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({ 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 78357dd11..9ade1b6b3 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 @@ -392,7 +392,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr openConfirm(dmpLabel, id): void { const dialogRef = this.dialog.open(ConfirmationDialogComponent, { - maxWidth: '300px', + //maxWidth: '300px', data: { message: this.language.instant('GENERAL.CONFIRMATION-DIALOG.DELETE-ITEM'), confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'), @@ -404,7 +404,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr this.datasetWizardService.delete(id) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => { this.onCallbackSuccess(); this.router.navigateByUrl('/datasets/dmp/' + this.formGroup.get('dmp').value.id);}, + complete => { this.onCallbackSuccess(); this.router.navigateByUrl('/datasets')}, error => this.onCallbackError(error) ); } diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts index e23a7c811..f9d165abb 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts @@ -39,7 +39,6 @@ import { AddResearcherComponent } from './add-researcher/add-researcher.componen import { AvailableProfilesComponent } from './available-profiles/available-profiles.component'; import { DmpEditorModel } from './dmp-editor.model'; import { DmpFinalizeDialogComponent } from './dmp-finalize-dialog/dmp-finalize-dialog.component'; -import { DmpProfileStatus } from '../../../core/common/enum/dmp-profile-status'; @Component({ selector: 'app-dmp-editor-component', @@ -193,7 +192,7 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC .pipe(takeUntil(this._destroyed)) .subscribe(Option => { if (Option instanceof Object) { - this.selectedDmpProfileDefinition=null; + this.selectedDmpProfileDefinition = null; this.dmpProfileService.getSingle(Option.id) .pipe(takeUntil(this._destroyed)) .subscribe(result => { @@ -344,8 +343,8 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC } }); } - onDeleteCallbackError(error){ - this.uiNotificationService.snackBarNotification(error.error.message? error.error.message : this.language.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-DELETE'), SnackBarNotificationLevel.Error); + onDeleteCallbackError(error) { + this.uiNotificationService.snackBarNotification(error.error.message ? error.error.message : this.language.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-DELETE'), SnackBarNotificationLevel.Error); } // selectOption(option: any) { diff --git a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model.ts b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model.ts index 8234c7092..d31785025 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard-model.ts @@ -1,4 +1,4 @@ -import { FormBuilder, FormGroup } from "@angular/forms"; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; import { ValidationContext } from "../../../common/forms/validation/validation-context"; @@ -17,9 +17,9 @@ export class DatasetEditorWizardModel extends BaseFormModel { return this; } - buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + buildForm(context: ValidationContext = null): FormGroup { if (context == null) { context = this.createValidationContext(); } - const formGroup = new FormBuilder().group({}); + const formGroup = new FormBuilder().group({},context.getValidation('datasetsList').validators); const formArray = new Array(); this.datasetsList.forEach(item => { const form: FormGroup = item.buildForm(); @@ -31,7 +31,7 @@ export class DatasetEditorWizardModel extends BaseFormModel { createValidationContext(): ValidationContext { const baseContext: ValidationContext = new ValidationContext(); - baseContext.validation.push({ key: 'datasetsList', validators: [BackendErrorValidator(this.validationErrorModel, 'datasetsList')] }); + baseContext.validation.push({ key: 'datasetsList', validators:[BackendErrorValidator(this.validationErrorModel, 'datasetsList')] }); return baseContext; } diff --git a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.html b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.html index 767ccc00c..af2e9d36d 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.html +++ b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.html @@ -35,7 +35,6 @@ - @@ -51,7 +50,7 @@ + [visibilityRules]="this.datasetProfileDefinition.rules" [datasetProfileId]="datasetProfile.value"> \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.ts b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.ts index b6a8d8b93..73bd3c06e 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dataset-editor/dataset-editor-wizard.component.ts @@ -11,6 +11,7 @@ import { IBreadCrumbComponent } from "../../misc/breadcrumb/definition/IBreadCru import { DatasetDescriptionFormEditorModel } from "../../misc/dataset-description-form/dataset-description-form.model"; import { QuickWizardDatasetDescriptionModel } from "./quick-wizard-dataset-description-model"; import { IfStmt } from "@angular/compiler"; +import { TranslateService } from "@ngx-translate/core"; @@ -27,70 +28,81 @@ export class DatasetEditorWizardComponent extends BaseComponent implements OnIni breadCrumbs: Observable; @Input() formGroup: FormGroup; - @Input() profile: FormGroup;// DatasetProfileModel; - @Input() datasetLabel:FormGroup; + @Input() datasetProfile: FormGroup;// DatasetProfileModel; + @Input() datasetLabel: string; editedDataset: boolean = false; dataset: DatasetDescriptionFormEditorModel; public datasetProfileDefinition: DatasetDescriptionFormEditorModel; public lastIndexOfDataset = 0; - public toggleButton=0; + public toggleButton = 0; public _inputValue: string; constructor( - private datasetWizardService: DatasetWizardService + private datasetWizardService: DatasetWizardService, + public language: TranslateService, ) { super(); } ngOnInit(): void { - } - - onValChange(event: any){ - if(event=="list"){ - this.toggleButton=0; - this.editedDataset=false; - this._inputValue="list"; - }else if (event=="add"){ - this.addDataset(); - this.toggleButton=2; - this._inputValue="dataset"; - }else if (event=="dataset"){ - this.toggleButton=2; - this._inputValue="dataset"; - } - - } - editDataset(index:number){ - this.lastIndexOfDataset = index; - this.toggleButton=2; - this.editedDataset=true; - this._inputValue="dataset" - } - - deleteDataset(index:number){//TODO: delete Dataset From List - this.lastIndexOfDataset = index; - this.toggleButton=0; - this.editedDataset=false; - this._inputValue="list"; - (this.formGroup.get('datasets').get('datasetsList') as FormArray).removeAt(index); - } - - addDataset() { - this.datasetWizardService.getDefinition(this.profile.value["id"]) + this.datasetWizardService.getDefinition(this.datasetProfile.value["id"]) .pipe(takeUntil(this._destroyed)) .subscribe(item => { this.datasetProfileDefinition = new DatasetDescriptionFormEditorModel().fromModel(item); - const formArray: FormArray = (this.formGroup.get('datasets').get('datasetsList') as FormArray); - this.lastIndexOfDataset = formArray.length; - let dataset = new QuickWizardDatasetDescriptionModel().fromModel(this.datasetProfileDefinition); - let formGroup = dataset.buildForm(); - formGroup.get('datasetLabel').setValue("Dataset :"+this.profile.value["label"]+" For Dmp : "+this.datasetLabel.value); - formArray.push(formGroup); - this.editedDataset=true; + this.onValChange("list"); + const length = (this.formGroup.get('datasets').get('datasetsList') as FormArray).length; + if (length == 0) { + this.lastIndexOfDataset = length; + this.addDataset(); + this.onValChange("dataset"); + } }); - + } + onValChange(event: any) { + if (event == "list") { + this.toggleButton = 0; + this.editedDataset = false; + this._inputValue = "list"; + } else if (event == "add") { + this.addDataset(); + this.toggleButton = 2; + this._inputValue = "dataset"; + } else if (event == "dataset") { + this.toggleButton = 2; + this._inputValue = "dataset"; + } + + } + editDataset(index: number) { + this.lastIndexOfDataset = index; + this.toggleButton = 2; + this.editedDataset = true; + this._inputValue = "dataset" + } + + deleteDataset(index: number) {//TODO: delete Dataset From List + this.lastIndexOfDataset = index; + this.toggleButton = 0; + this.editedDataset = false; + this._inputValue = "list"; + (this.formGroup.get('datasets').get('datasetsList') as FormArray).removeAt(index); + } + + addDataset() { + const formArray: FormArray = (this.formGroup.get('datasets').get('datasetsList') as FormArray); + let dataset = new QuickWizardDatasetDescriptionModel().fromModel(this.datasetProfileDefinition); + let formGroup = dataset.buildForm(); + + formGroup.get('datasetLabel').setValue( + this.language.instant('QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.THIRD-STEP.DATASET-NAME') + + this.datasetProfile.value["label"] + + this.language.instant('QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.THIRD-STEP.DATASET-NAME-FOR') + + this.datasetLabel); + formArray.push(formGroup); + this.lastIndexOfDataset = formArray.length - 1; + this.editedDataset = true; } diff --git a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts index 9f05ff5cd..da9fd3fc2 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts @@ -29,7 +29,7 @@ export class DmpEditorWizardComponent extends BaseComponent implements OnInit, I isNew = true; dmp: DmpEditorWizardModel; @Input() formGroup: FormGroup; - @Input() dmpLabel: FormGroup; + @Input() dmpLabel: string; //formGroup: FormGroup = null; private uiNotificationService: UiNotificationService @@ -43,7 +43,7 @@ export class DmpEditorWizardComponent extends BaseComponent implements OnInit, I public router: Router, private route: ActivatedRoute, private _service: DmpService, - public language: TranslateService, + public language: TranslateService ) { super(); } @@ -62,8 +62,9 @@ export class DmpEditorWizardComponent extends BaseComponent implements OnInit, I this.dmp = new DmpEditorWizardModel(); this.formGroup = this.dmp.buildForm(); } - this.formGroup.get('label').setValue("Dmp From Project : "+ this.dmpLabel.value); - + this.formGroup.get('label').setValue(this.language.instant('QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.SECOND-STEP.DMP-NAME')+this.dmpLabel); + this.formGroup.get('label').setValue(this.language.instant('QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.SECOND-STEP.DMP-NAME')+this.dmpLabel); + this.breadCrumbs = Observable.of([ { parentComponentName: 'project', diff --git a/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard-model.ts b/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard-model.ts index 2208fe2bd..0b584948d 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard-model.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard-model.ts @@ -4,12 +4,14 @@ import { ValidationContext } from "../../../common/forms/validation/validation-c import { FormGroup, FormBuilder, Validators } from "@angular/forms"; import { BackendErrorValidator } from "../../../common/forms/validation/custom-validator"; import { ValidationErrorModel } from "../../../common/forms/validation/error-model/validation-error-model"; +import { ValidJsonValidator } from "../../../library/auto-complete/auto-complete-custom-validator"; export class ProjectEditorWizardModel { public id: string; public label: string; public status: Status = Status.Active; public description: String; + public existProject: ProjectListingModel; public validationErrorModel: ValidationErrorModel = new ValidationErrorModel(); @@ -29,6 +31,7 @@ export class ProjectEditorWizardModel { 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], + existProject: [{ value: this.existProject, disabled: disabled }, context.getValidation('existProject').validators], }); return formGroup; } @@ -39,6 +42,10 @@ export class ProjectEditorWizardModel { baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] }); baseContext.validation.push({ key: 'status', validators: [] }); baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'description')] }); + baseContext.validation.push({ key: 'existProject', validators: [Validators.required, ValidJsonValidator, BackendErrorValidator(this.validationErrorModel, 'existProject')] }); return baseContext; } + + } + diff --git a/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.html b/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.html index e94eb7657..27436ab00 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.html +++ b/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.html @@ -1,42 +1,68 @@
- {{'QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.FIRST-STEP.NEW-TITLE' | translate}} -
+ + - + -
+
- - {{formGroup.get('label').getError('backendError').message}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - - - - - - {{formGroup.get('description').getError('backendError').message}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + + + {{formGroup.get('project').getError('backendError').message}} + + {{'GENERAL.VALIDATION.REQUIRED' | translate}}
+ +
+ + + + {{formGroup.get('label').getError('backendError').message}} + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + + + + {{formGroup.get('description').getError('backendError').message}} + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+ +
+
+
+
+

+ {{'QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.FIRST-STEP.OR' | translate}} +

+
+
+
+
+
+
+ + + + +
+
+ -
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.ts b/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.ts index 566f55e65..2614bc76f 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.ts @@ -1,16 +1,20 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { BaseComponent } from "../../../core/common/base/base.component"; -import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; +import { Component, Input, OnInit } from '@angular/core'; +import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; +import { MatSnackBar } from '@angular/material'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; +import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; +import { BaseComponent } from "../../../core/common/base/base.component"; +import { ProjectCriteria } from '../../../core/query/project/project-criteria'; +import { RequestItem } from '../../../core/query/request-item'; +import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; +import { ProjectService } from '../../../core/services/project/project.service'; +import { SingleAutoCompleteConfiguration } from '../../../library/auto-complete/single/single-auto-complete-configuration'; +import { LanguageResolverService } from '../../../services/language-resolver/language-resolver.service'; +import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; import { ProjectEditorWizardModel } from './project-editor-wizard-model'; -import { MatSnackBar } from '@angular/material'; -import { Router, ActivatedRoute, Params } from '@angular/router'; -import { TranslateService } from '@ngx-translate/core'; -import { FormGroup, AbstractControl, FormControl, FormArray } from '@angular/forms'; -import { takeUntil } from 'rxjs/operators'; -import { ValidationErrorModel } from '../../../common/forms/validation/error-model/validation-error-model'; -import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/services/notification/ui-notification-service'; @Component({ selector: 'app-quick-wizard-project-editor-component', @@ -20,27 +24,26 @@ import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/ export class ProjectEditorWizardComponent extends BaseComponent implements OnInit, IBreadCrumbComponent { breadCrumbs: Observable = Observable.of([]); - isNew = true; + isNew = false; project: ProjectEditorWizardModel; @Input() formGroup: FormGroup; //formGroup: FormGroup = null; private uiNotificationService: UiNotificationService + projectAutoCompleteConfiguration: SingleAutoCompleteConfiguration; constructor( public snackBar: MatSnackBar, private route: ActivatedRoute, public router: Router, public language: TranslateService, + private projectService: ProjectService, + public languageResolverService: LanguageResolverService, ) { super(); } ngOnInit() { - if (this.formGroup == null) { - this.project = new ProjectEditorWizardModel(); - this.formGroup = this.project.buildForm(); - } this.breadCrumbs = Observable.of([ { parentComponentName: 'QuickCreate', @@ -48,6 +51,29 @@ export class ProjectEditorWizardComponent extends BaseComponent implements OnIni url: '/quick-wizard/project' }] ); + + const projectRequestItem: RequestItem = new RequestItem(); + projectRequestItem.criteria = new ProjectCriteria(); + + this.projectAutoCompleteConfiguration = { + filterFn: this.searchProject.bind(this), + initialItems: (extraData) => this.searchProject(''), + displayFn: (item) => item['label'], + titleFn: (item) => item['label'] + }; + + if (!this.formGroup) { + this.project = new ProjectEditorWizardModel(); + this.formGroup = this.project.buildForm(); + } + + this.formGroup.get('existProject').enable(); + this.formGroup.get('label').disable(); + this.formGroup.get('description').disable(); + + + + // this.route.params // .pipe(takeUntil(this._destroyed)) // .subscribe((params: Params) => { @@ -76,11 +102,6 @@ export class ProjectEditorWizardComponent extends BaseComponent implements OnIni // }); } - formSubmit(): void { - this.touchAllFormFields(this.formGroup); - if (!this.isFormValid()) { return; } - this.onSubmit(); - } public isFormValid() { return this.formGroup.valid; @@ -101,16 +122,6 @@ export class ProjectEditorWizardComponent extends BaseComponent implements OnIni } } - onSubmit(): void { - // this.projectService.createProject(this.formGroup.value) - // .pipe(takeUntil(this._destroyed)) - // .subscribe( - // complete => this.onCallbackSuccess(), - // error => this.onCallbackError(error) - // ); - } - - onCallbackSuccess(): void { this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); this.router.navigate(['/project']); @@ -143,4 +154,27 @@ export class ProjectEditorWizardComponent extends BaseComponent implements OnIni } + searchProject(query: string) { + const projectRequestItem: RequestItem = new RequestItem(); + projectRequestItem.criteria = new ProjectCriteria(); + projectRequestItem.criteria.like = query; + return this.projectService.getWithExternal(projectRequestItem); + } + + create() { + this.isNew = !this.isNew; + if (this.isNew) { + this.formGroup.get('existProject').disable(); + this.formGroup.get('existProject').reset(); + this.formGroup.get('label').enable(); + this.formGroup.get('description').enable(); + } else { + this.formGroup.get('existProject').enable(); + this.formGroup.get('label').disable(); + this.formGroup.get('label').reset(); + this.formGroup.get('description').disable(); + this.formGroup.get('description').reset(); + } + } + } \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.html b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.html index 6a5a844c5..510bb1d0f 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.html +++ b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.html @@ -4,29 +4,27 @@
- - - {{'QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.FIRST-STEP.TITLE' | translate}} - -
- - -
- -
+ + {{'QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.FIRST-STEP.TITLE' | translate}} + +
+ + +
+
- - - {{'QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.SECOND-STEP.TITLE' | translate}} - -
+ + {{'QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.SECOND-STEP.TITLE' | translate}} + + +
+ [dmpLabel]=" getProjectLabel()">