diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java index 1a72ac2a5..f53a59ae5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java @@ -74,8 +74,8 @@ public class DatasetProfileController extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/search/autocomplete"}, consumes = "application/json", produces = "application/json") public ResponseEntity getDataForAutocomplete(@RequestBody RequestItem lookupItem) throws XPathExpressionException { - eu.eudat.data.entities.Dataset dataset = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(lookupItem.getCriteria().getProfileID())); - eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field modelfield = DatasetProfileManager.queryForField(dataset.getProfile().getDefinition(), lookupItem.getCriteria().getFieldID()); + eu.eudat.data.entities.DatasetProfile datasetProfile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(lookupItem.getCriteria().getProfileID())); + eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field modelfield = DatasetProfileManager.queryForField(datasetProfile.getDefinition(), lookupItem.getCriteria().getFieldID()); AutoCompleteData data = (AutoCompleteData) modelfield.getData(); List> items = DatasetProfileManager.getAutocomplete(data, lookupItem.getCriteria().getLike()); return ResponseEntity.status(HttpStatus.OK).body(items); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java index fb7819e83..66cecd752 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java @@ -31,7 +31,8 @@ public class Field implements ViewStyleDefinition { - public type: string; + public type: DatasetProfileComboBoxType = DatasetProfileComboBoxType.Autocomplete; public url: string; public optionsRoot: string; public autoCompleteOptions: FieldDataOptionEditorModel = new FieldDataOptionEditorModel(); diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-data/combo-box-field-data-editor-model.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-data/combo-box-field-data-editor-model.ts new file mode 100644 index 000000000..f0998ef72 --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-data/combo-box-field-data-editor-model.ts @@ -0,0 +1,34 @@ +import { FormGroup } from '@angular/forms'; +import { DatasetProfileComboBoxType } from '../../../../../core/common/enum/dataset-profile-combo-box-type'; +import { WordListFieldData } from '../../../../../core/model/dataset-profile-definition/field-data/field-data'; +import { FieldDataEditorModel } from './field-data-editor-model'; +import { FieldDataOptionEditorModel } from './field-data-option-editor-model'; + +export class WordListFieldDataEditorModel extends FieldDataEditorModel { + public type: DatasetProfileComboBoxType = DatasetProfileComboBoxType.WordList; + public options: Array; + + buildForm(): FormGroup { + const formGroup = this.formBuilder.group({ + type: [this.type], + label: [this.label] + }); + const optionsFormArray = new Array(); + if (this.options) { + this.options.forEach(item => { + const form: FormGroup = item.buildForm(); + optionsFormArray.push(form); + }); + } + formGroup.addControl('options', this.formBuilder.array(optionsFormArray)); + + return formGroup; + } + + fromModel(item: WordListFieldData): WordListFieldDataEditorModel { + this.type = item.type; + if (item.options) { this.options = item.options.map(x => new FieldDataOptionEditorModel().fromModel(x)); } + this.label = item.label; + return this; + } +} diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-data/word-list-field-data-editor-model.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-data/word-list-field-data-editor-model.ts index 174dc758e..f0998ef72 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-data/word-list-field-data-editor-model.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-data/word-list-field-data-editor-model.ts @@ -5,7 +5,7 @@ import { FieldDataEditorModel } from './field-data-editor-model'; import { FieldDataOptionEditorModel } from './field-data-option-editor-model'; export class WordListFieldDataEditorModel extends FieldDataEditorModel { - public type: DatasetProfileComboBoxType; + public type: DatasetProfileComboBoxType = DatasetProfileComboBoxType.WordList; public options: Array; buildForm(): FormGroup { @@ -27,7 +27,7 @@ export class WordListFieldDataEditorModel extends FieldDataEditorModel new FieldDataOptionEditorModel().fromModel(x)); } + if (item.options) { this.options = item.options.map(x => new FieldDataOptionEditorModel().fromModel(x)); } this.label = item.label; return this; } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts index 3ba94c5da..83815402b 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts @@ -24,7 +24,7 @@ export class FieldEditorModel extends BaseFormModel { public ordinal: number; public visible: VisibilityEditorModel = new VisibilityEditorModel(); public data: FieldDataEditorModel; - public validations: ValidationType[]; + public validations: ValidationType[] = []; fromModel(item: Field): FieldEditorModel { this.id = item.id; @@ -70,6 +70,7 @@ export class FieldEditorModel extends BaseFormModel { formGroup.addControl('visible', this.visible.buildForm()); //formGroup.addControl("data",this.data? this.data.buildForm():this.formBuilder.group({})); if (this.data) { formGroup.addControl('data', this.data.buildForm()); } + else { formGroup.addControl('data', new WordListFieldDataEditorModel().buildForm()); } return formGroup; } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component.ts index 8e6feb7b5..84504b398 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field-type/combo-box/dataset-profile-editor-combo-box-field.component.ts @@ -1,9 +1,9 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; -import { DatasetProfileComboBoxType } from '../../../../../../../core/common/enum/dataset-profile-combo-box-type'; -import { EnumUtils } from '../../../../../../../core/services/utilities/enum-utils.service'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../../../../../../core/common/base/base.component'; +import { DatasetProfileComboBoxType } from '../../../../../../../core/common/enum/dataset-profile-combo-box-type'; +import { EnumUtils } from '../../../../../../../core/services/utilities/enum-utils.service'; @Component({ selector: 'app-dataset-profile-editor-combo-box-field-component', @@ -20,10 +20,41 @@ export class DatasetProfileEditorComboBoxFieldComponent extends BaseComponent im ) { super(); } ngOnInit() { + // this.form.get('data').get('type').valueChanges + // .pipe(takeUntil(this._destroyed)) + // .subscribe(x => { + // if (x === "autocomplete") { + // //if(!this.form.get('data').get('url')) this.form.addControl('data', new AutoCompleteFieldDataEditorModel().buildForm()); + // //delete + // if (this.form.get('data').get('options')) (this.form.get('data')).removeControl('options'); + // //add + // if (!this.form.get('data').get('url')) (this.form.get('data')).addControl('url', new FormControl('')); + // if (!this.form.get('data').get('optionsRoot')) (this.form.get('data')).addControl('optionsRoot', new FormControl('')); + // if (!this.form.get('data').get('autoCompleteOptions')) (this.form.get('data')).addControl('autoCompleteOptions', new FormControl('')); + + // } else if (x === "wordlist") { + // //this.form.addControl('data', new WordListFieldDataEditorModel().buildForm()); + // //delete + // if (this.form.get('data').get('url')) (this.form.get('data')).removeControl('url'); + // if (this.form.get('data').get('optionsRoot')) (this.form.get('data')).removeControl('optionsRoot'); + // if (this.form.get('data').get('autoCompleteOptions')) (this.form.get('data')).removeControl('autoCompleteOptions'); + // //add + // if (!this.form.get('data').get('options')) (this.form.get('data')).addControl('options', new FormControl); + // } + + // }); this.form.get('data').get('type').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(x => { - if (this.form.get('data')) { this.form.removeControl('data'); } + if (this.form.get('data')) { + this.form.removeControl('data'); + if(x==="autocomplete"){ + this.form.addControl('data',new AutoCompleteFieldDataEditorModel().buildForm()); + }else if(x==="wordlist"){ + this.form.addControl('data',new WordListFieldDataEditorModel().buildForm()); + } + } }) + } } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html index 25a6e59dd..8e1525dbb 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html @@ -4,7 +4,7 @@ - + {{enumUtils.toDatasetProfileFieldViewStyleString(viewStyleEnum.BooleanDecision)}} {{enumUtils.toDatasetProfileFieldViewStyleString(viewStyleEnum.CheckBox)}} {{enumUtils.toDatasetProfileFieldViewStyleString(viewStyleEnum.ComboBox)}} @@ -21,7 +21,7 @@ - {{enumUtils.toDatasetProfileFieldValidationTypeString(option)}} + {{enumUtils.toDatasetProfileFieldValidationTypeString(validationTypeEnum.Required)}} diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts index 32e9d820b..cee2c6f62 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts @@ -1,30 +1,40 @@  -import { Component, Input, OnInit } from '@angular/core'; -import { FormArray, FormControl, FormGroup } from '@angular/forms'; +import { Component, Input, OnInit, ViewChild } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup, Validators, FormArray } from '@angular/forms'; import { ValidationType } from '../../../../../../core/common/enum/validation-type'; import { EnumUtils } from '../../../../../../core/services/utilities/enum-utils.service'; import { RuleEditorModel } from '../../../admin/rule-editor-model'; import { DatasetProfileFieldViewStyle } from '../../../../../../core/common/enum/dataset-profile-field-view-style'; +import { RadioBoxFieldDataEditorModel } from '../../../admin/field-data/radio-box-field-data-editor-model'; +import { DatasetProfileEditorComboBoxFieldComponent } from '../field-type/combo-box/dataset-profile-editor-combo-box-field.component'; +import { takeUntil } from 'rxjs/operators'; +import { BaseComponent } from '../../../../../../core/common/base/base.component'; +import { ViewStyleEditorModel } from '../../../admin/view-style-editor-model'; +import { TextAreaFieldDataEditorModel } from '../../../admin/field-data/text-area-field-data-editor-model'; +import { BooleanDecisionFieldDataEditorModel } from '../../../admin/field-data/boolean-decision-field-data-editor-model'; +import { CheckBoxFieldDataEditorModel } from '../../../admin/field-data/check-box-field-data-editor-model'; +import { FreeTextFieldDataEditorModel } from '../../../admin/field-data/free-text-field-data-editor-model'; +import { WordListFieldDataEditorModel } from '../../../admin/field-data/word-list-field-data-editor-model'; +import { AutoCompleteFieldDataEditorModel } from '../../../admin/field-data/auto-complete-field-data-editor-model'; @Component({ selector: 'app-dataset-profile-editor-field-component', templateUrl: './dataset-profile-editor-field.component.html', styleUrls: ['./dataset-profile-editor-field.component.scss'] }) -export class DatasetProfileEditorFieldComponent implements OnInit { +export class DatasetProfileEditorFieldComponent extends BaseComponent implements OnInit { @Input() form: FormGroup; @Input() showMultiplicity = true; @Input() showOrdinal = true; @Input() indexPath: string; - validationsOptions: ValidationType[] = this.enumUtils.getEnumValues(ValidationType); + validationTypeEnum = ValidationType; viewStyleEnum = DatasetProfileFieldViewStyle; isFieldMultiplicityEnabled = false; constructor( public enumUtils: EnumUtils - ) { - } + ) { super(); } ngOnInit() { if (this.form.get('multiplicity')) { @@ -33,6 +43,46 @@ export class DatasetProfileEditorFieldComponent implements OnInit { } } // this.addNewRule(); + + this.form.get('viewStyle').get('renderStyle').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => { + if (this.form.get('data')) { + this.form.removeControl('data'); + + switch (x) { + case DatasetProfileFieldViewStyle.BooleanDecision: + this.form.addControl('data', new BooleanDecisionFieldDataEditorModel().buildForm()); + break; + + case DatasetProfileFieldViewStyle.CheckBox: + this.form.addControl('data', new CheckBoxFieldDataEditorModel().buildForm()); + break; + + case DatasetProfileFieldViewStyle.ComboBox: + //this.form.removeControl('data'); + this.form.addControl('data', new FormGroup({})); + (this.form.get('data')).addControl('type', new FormControl('')); + (this.form.get('data')).addControl('label', new FormControl('')); + //this.form.get('data').get('type').setValue("autocomplete"); + + + break; + + case DatasetProfileFieldViewStyle.FreeText: + this.form.addControl('data', new FreeTextFieldDataEditorModel().buildForm()); + break; + + case DatasetProfileFieldViewStyle.RadioBox: + this.form.addControl('data', new RadioBoxFieldDataEditorModel().buildForm()); + break; + + case DatasetProfileFieldViewStyle.TextArea: + this.form.addControl('data', new TextAreaFieldDataEditorModel().buildForm()); + break; + } + } + }); } onIsFieldMultiplicityEnabledChange(isFieldMultiplicityEnabled: boolean) { @@ -46,8 +96,4 @@ export class DatasetProfileEditorFieldComponent implements OnInit { const rule: RuleEditorModel = new RuleEditorModel(); (this.form.get('visible').get('rules')).push(rule.buildForm()); } - - onchangeCombo() { - if (this.form.get('data')) { this.form.removeControl('data'); } - } } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component.html index 96c98a93f..52d24c71c 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component.html +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/section/dataset-profile-editor-section.component.html @@ -43,7 +43,7 @@
{{i + 1}}. {{form.get('sections').get(''+i).get('title').value}} -
diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html index 88d809b46..24073d550 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html @@ -68,7 +68,11 @@ {{'DATASET-WIZARD.THIRD-STEP.TITLE' | translate}}
+<<<<<<< HEAD +======= + +>>>>>>> df51afe83344e5ee398f54d9a0a0b48f41588e16
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.html index 67b973e45..0f777840f 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.html @@ -11,7 +11,11 @@
{{form.get('extendedDescription').value}}
+<<<<<<< HEAD +======= + +>>>>>>> df51afe83344e5ee398f54d9a0a0b48f41588e16
@@ -31,10 +35,17 @@
+<<<<<<< HEAD
+======= + +
+
+ +>>>>>>> df51afe83344e5ee398f54d9a0a0b48f41588e16
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts index 51dc3a48b..4043585b4 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts @@ -16,8 +16,10 @@ import { VisibilityRulesService } from '../../visibility-rules/visibility-rules. styleUrls: ['./form-field.component.scss'] }) export class FormFieldComponent extends BaseComponent implements OnInit { + // @Input() field: Field; @Input() form: FormGroup; + @Input() datasetProfileId: String; // change: Subscription; // trackByFn = (index, item) => item ? item['id'] : null; @@ -56,9 +58,9 @@ export class FormFieldComponent extends BaseComponent implements OnInit { searchFromAutocomplete(query: string) { const autocompleteRequestItem: RequestItem = new RequestItem(); autocompleteRequestItem.criteria = new DatasetExternalAutocompleteCriteria(); + autocompleteRequestItem.criteria.fieldID = this.form.get('id').value; - //TODO: why do we need dataset id? - //autocompleteRequestItem.criteria.profileID = this.datasetId; + autocompleteRequestItem.criteria.profileID = this.datasetProfileId; return this.datasetExternalAutocompleteService.queryAutocomplete(autocompleteRequestItem); } diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.html index f13b8bc13..e8234583d 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.html @@ -19,11 +19,20 @@ Add one more fieldset + -->
+<<<<<<< HEAD
+======= + +
+
+ + +>>>>>>> df51afe83344e5ee398f54d9a0a0b48f41588e16
@@ -34,11 +43,17 @@
+<<<<<<< HEAD
+======= +
+
+ +>>>>>>> df51afe83344e5ee398f54d9a0a0b48f41588e16
-
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.html index 346328818..542bfdd75 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.html @@ -9,7 +9,11 @@ {{pageFormGroup.get('title').value}}
+<<<<<<< HEAD +======= + +>>>>>>> df51afe83344e5ee398f54d9a0a0b48f41588e16
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.ts index e23bdf4b9..28e47c915 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.ts @@ -36,6 +36,8 @@ export class DatasetDescriptionFormComponent extends BaseComponent implements On // id: string; // trackByFn = (index, item) => item ? item['id'] : null; // pageTrackByFn = (index, item) => item['id']; + @Input() datasetProfileId: String; + constructor( private router: Router, diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts index cb2517f49..bf46926c1 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts @@ -179,6 +179,10 @@ export class DatasetDescriptionCompositeFieldEditorModel extends BaseFormModel { this.fields.forEach(field => { newItem.fields.push(field.cloneForMultiplicity(this.fields.indexOf(field), newItem.id + '_')); }); + + // put on new item only the first (Fields) value and the last (Fields) value + // the first is on "fields":[{},{}] + // and the New is on "multiplicityItem":[{ fields":[{},{}] },{ fields":[{},{}] }] newItem.ordinal = this.ordinal; return newItem;