From 7580f1b6e4baea2824490f45ffb4a3c540919402 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Tue, 25 Jul 2023 16:58:41 +0300 Subject: [PATCH] oaipmh-validator.component: Improvements, fixes and checks added & Added subscriptions and ngOnDestroy & Added real API call to validate | oaipmh-analysis.component.ts & oaipmh-history.component.ts & single-record-validator.component.ts: Added subscriptions and ngOnDestroy | oaipmh-validator.service.ts: In method "validate()" added real API call & if all sets are chosen, do not send the set parameter | topmenu.component.html: Added "Validate [demo]" option. --- .../oaipmh-analysis.component.ts | 16 +++---- .../oaipmh-history.component.ts | 4 +- .../oaipmh-validator.component.html | 11 ++--- .../oaipmh-validator.component.ts | 42 ++++++++++++++++--- .../single-record-validator.component.ts | 15 ++++++- src/app/services/oaipmh-validator.service.ts | 3 +- src/app/shared/topmenu/topmenu.component.html | 3 ++ 7 files changed, 70 insertions(+), 24 deletions(-) diff --git a/src/app/pages/oaipmh-validator/validation-analysis/oaipmh-analysis.component.ts b/src/app/pages/oaipmh-validator/validation-analysis/oaipmh-analysis.component.ts index bc79ab8..97b2360 100644 --- a/src/app/pages/oaipmh-validator/validation-analysis/oaipmh-analysis.component.ts +++ b/src/app/pages/oaipmh-validator/validation-analysis/oaipmh-analysis.component.ts @@ -93,7 +93,7 @@ export class OaipmhAnalysisComponent implements OnInit { public getAnalysis() { - this.validator.getAnalysis(this.jobId).subscribe( + this.subscriptions.push(this.validator.getAnalysis(this.jobId).subscribe( (result: RulePerJob[]) => { console.log(result); // this.analysisResult = result; @@ -115,7 +115,7 @@ export class OaipmhAnalysisComponent implements OnInit { } } } - ); + )); } public openWarningsModal(rule: RulePerJob) { @@ -138,13 +138,13 @@ export class OaipmhAnalysisComponent implements OnInit { this.warnings = []; this.openWarningsModal(rule); this.warningsModalOpen = true; - this.validator.getWarnings(this.jobId, rule.rule_name).subscribe( + this.subscriptions.push(this.validator.getWarnings(this.jobId, rule.rule_name).subscribe( result => { this.warnings = result; console.log(result); // this.result = result; } - ); + )); } getErrors(rule: RulePerJob) { @@ -154,17 +154,17 @@ export class OaipmhAnalysisComponent implements OnInit { this.errorsModalOpen = true; if(rule.has_errors) { - this.validator.getErrors(this.jobId, rule.rule_name).subscribe( + this.subscriptions.push(this.validator.getErrors(this.jobId, rule.rule_name).subscribe( result => { this.errors = result; console.log(result); } - ); + )); } } public getJobResult() { - this.validator.getJobResult(this.jobId).subscribe( + this.subscriptions.push(this.validator.getJobResult(this.jobId).subscribe( (result: JobResult) => { this.jobResult = result; let startDate = new Date(this.jobResult.startDate); @@ -179,7 +179,7 @@ export class OaipmhAnalysisComponent implements OnInit { this.jobDuration.months = Math.floor(this.jobDuration.days / 31); this.jobDuration.years = Math.floor(this.jobDuration.months / 12); } - ); + )); } protected readonly Status = Status; diff --git a/src/app/pages/oaipmh-validator/validation-history/oaipmh-history.component.ts b/src/app/pages/oaipmh-validator/validation-history/oaipmh-history.component.ts index 896d231..d6eb61b 100644 --- a/src/app/pages/oaipmh-validator/validation-history/oaipmh-history.component.ts +++ b/src/app/pages/oaipmh-validator/validation-history/oaipmh-history.component.ts @@ -42,11 +42,11 @@ export class OaipmhHistoryComponent implements OnInit { } public getJobResult() { - this.validator.getJobResult(this.jobId).subscribe( + this.subscriptions.push(this.validator.getJobResult(this.jobId).subscribe( (result: JobResult) => { this.result = result; } - ); + )); } protected readonly Status = Status; diff --git a/src/app/pages/oaipmh-validator/validation-settings/oaipmh-validator.component.html b/src/app/pages/oaipmh-validator/validation-settings/oaipmh-validator.component.html index 9d47132..62a1b5b 100644 --- a/src/app/pages/oaipmh-validator/validation-settings/oaipmh-validator.component.html +++ b/src/app/pages/oaipmh-validator/validation-settings/oaipmh-validator.component.html @@ -21,7 +21,7 @@
3. Define the number of record to validate
-
+
@@ -31,15 +31,16 @@ Custom - + {{recordsNum}} - +
-
-
diff --git a/src/app/pages/oaipmh-validator/validation-settings/oaipmh-validator.component.ts b/src/app/pages/oaipmh-validator/validation-settings/oaipmh-validator.component.ts index 2bf15f2..e63724b 100644 --- a/src/app/pages/oaipmh-validator/validation-settings/oaipmh-validator.component.ts +++ b/src/app/pages/oaipmh-validator/validation-settings/oaipmh-validator.component.ts @@ -3,6 +3,9 @@ import {OaipmhValidatorService} from "../../../services/oaipmh-validator.service import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms"; import {Option} from "../../../openaire-library/sharedComponents/input/input.component"; import {StringUtils} from "../../../openaire-library/utils/string-utils.class"; +import {JobResult} from "../../entities/JobResult"; +import {Router} from "@angular/router"; +import {Subscriber} from "rxjs"; @Component({ selector: 'app-oaipmh-validator', @@ -19,37 +22,64 @@ export class OaipmhValidatorComponent implements OnInit { public form: UntypedFormGroup; public sets: Option[] = [{label: 'All sets', value: 'all'}]; public recordsNum: number = 10; + public loadingSets: boolean = false; - constructor(private fb: UntypedFormBuilder, private validator: OaipmhValidatorService) { + subscriptions = []; + + constructor(private fb: UntypedFormBuilder, private router: Router, private validator: OaipmhValidatorService) { this.form = this.fb.group({ url: this.fb.control("", StringUtils.urlValidator()),//[Validators.required/*, Validators.email*/]), guidelines: this.fb.control("", Validators.required), recordsNum: this.fb.control(null, Validators.required), - set: this.fb.control('', Validators.required) + set: this.fb.control('all', Validators.required) }); } ngOnInit() {} + ngOnDestroy() { + this.subscriptions.forEach(subscription => { + if (subscription instanceof Subscriber) { + subscription.unsubscribe(); + } + }); + } + updateRecordsNum(increase: boolean = true) { this.recordsNum = this.recordsNum + (increase ? 10 : -10); this.form.get('recordsNum').setValue(this.recordsNum); } getSets() { + this.loadingSets = true; let options: Option[] = [{label: 'All sets', value: 'all'}]; + if(this.form.get('setName')) { + this.form.get('setName').setValue('all'); + } if(this.form.get('url') && this.form.get('url').value && StringUtils.isValidUrl(this.form.get('url').value)) { - this.validator.getSets(this.form.get('url').value).subscribe(sets => { + this.subscriptions.push(this.validator.getSets(this.form.get('url').value).subscribe(sets => { for(let set of sets) { options.push({label: set['setName'], value: set['setSpec']}); } this.sets = options; - }); + this.loadingSets = false; + }, error => { + this.sets = options; + this.loadingSets = false; + })); + } else { + this.sets = options; + this.loadingSets = false; } } validate() { - console.log(this.form.value); - this.validator.validate(this.form.get('guidelines').value, this.form.get('url').value, this.form.get('recordsNum').value, this.form.get('set').value); + this.subscriptions.push(this.validator.validate(this.form.get('guidelines').value, this.form.get('url').value, this.form.get('recordsNum').value, this.form.get('set').value).subscribe( + (result: JobResult) => { + this.router.navigate(['/oaipmh-history'], { + queryParams: { 'jobId': result.id } + }); + } + )); } } diff --git a/src/app/pages/single-record-validator/single-record-validator.component.ts b/src/app/pages/single-record-validator/single-record-validator.component.ts index 8343aca..afbffab 100644 --- a/src/app/pages/single-record-validator/single-record-validator.component.ts +++ b/src/app/pages/single-record-validator/single-record-validator.component.ts @@ -4,6 +4,7 @@ import {SingleRecordValidatorService} from "../../services/single-record-validat import {RuleInfo} from "../entities/RuleInfo"; import {XmlValidationResponse} from "../entities/XmlValidationResponse"; import {Option} from "../../openaire-library/sharedComponents/input/input.component"; +import {Subscriber} from "rxjs"; @Component({ selector: 'app-single-record-validator', @@ -26,6 +27,8 @@ export class SingleRecordValidatorComponent implements OnInit { public viewResults: boolean = false; public validationAnalysis: boolean = true; + subscriptions = []; + constructor(private fb: UntypedFormBuilder, private validator: SingleRecordValidatorService) { this.form = this.fb.group({ guidelines: this.fb.control("", Validators.required), @@ -35,12 +38,20 @@ export class SingleRecordValidatorComponent implements OnInit { ngOnInit(): void {} + ngOnDestroy() { + this.subscriptions.forEach(subscription => { + if (subscription instanceof Subscriber) { + subscription.unsubscribe(); + } + }); + } + public validate() { - this.validator.validateRecord(this.form.get('xml')?.getRawValue(), this.form.get('guidelines')?.getRawValue()).subscribe( + this.subscriptions.push(this.validator.validateRecord(this.form.get('xml')?.getRawValue(), this.form.get('guidelines')?.getRawValue()).subscribe( result => { this.result = result; } - ) + )); } public openMessagesModal(rule: RuleInfo) { diff --git a/src/app/services/oaipmh-validator.service.ts b/src/app/services/oaipmh-validator.service.ts index 32c883f..55cd26c 100644 --- a/src/app/services/oaipmh-validator.service.ts +++ b/src/app/services/oaipmh-validator.service.ts @@ -37,7 +37,8 @@ export class OaipmhValidatorService { validate(guidelines: string, baseUrl: string, numberOfRecords: string, set: string) { let url: string = environment.validatorAPI + "realValidator?guidelines="+guidelines+"&baseUrl="+baseUrl - +(numberOfRecords ? ("&numberOfRecords="+numberOfRecords) : "") + (set ? ("&set="+set) : ""); + +(numberOfRecords ? ("&numberOfRecords="+numberOfRecords) : "") + (set && set != 'all' ? ("&set="+set) : ""); console.log(url); + return this.http.get(url); } } diff --git a/src/app/shared/topmenu/topmenu.component.html b/src/app/shared/topmenu/topmenu.component.html index eba980f..92fa25d 100644 --- a/src/app/shared/topmenu/topmenu.component.html +++ b/src/app/shared/topmenu/topmenu.component.html @@ -102,6 +102,9 @@
  • Singe Record
  • +
  • + Validate [demo] +
  • History [demo]