/* * # ============LICENSE_START======================================================= * # Copyright (c) 2020 AT&T Intellectual Property. All rights reserved. * # ================================================================================ * # Licensed under the Apache License, Version 2.0 (the "License"); * # you may not use this file except in compliance with the License. * # You may obtain a copy of the License at * # * # http://www.apache.org/licenses/LICENSE-2.0 * # * # Unless required by applicable law or agreed to in writing, software * # distributed under the License is distributed on an "AS IS" BASIS, * # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * # See the License for the specific language governing permissions and * # limitations under the License. * # ============LICENSE_END========================================================= */ import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import { SpecValidationService } from '../services/spec-validation.service'; import { DownloadService } from '../services/download.service'; import { Ng4LoadingSpinnerService } from 'ng4-loading-spinner'; @Component({ selector: 'app-comp-spec-validation', templateUrl: './comp-spec-validation.component.html', styleUrls: ['./comp-spec-validation.component.css'] }) export class CompSpecValidationComponent implements OnInit { @ViewChild('myFile', {static: false}) myInputVariable: ElementRef; spec_validator_action; release = ''; type = ''; shouldValidate = false; shouldDownload = false; validCompSpec = false; specValidated = false; specValidationOutputSummary: any; constructor(private specValidator: SpecValidationService, private downloadService: DownloadService, private spinnerService: Ng4LoadingSpinnerService ) { } ngOnInit() { } compSpecSelected: any; onCompSpecUpload(event){ this.compSpecSelected = event.target.files[0]; this.readCsFileContent(this.compSpecSelected); } compSpecContent: any = null; readCsFileContent(file) { if (file) { let fileReader = new FileReader(); fileReader.onload = (e) => { this.compSpecContent = fileReader.result; }; fileReader.readAsText(file); } } validateRadioButton(){ this.shouldValidate = true; this.shouldDownload = false; } downloadRadioButton(){ this.shouldValidate = false; this.shouldDownload = true; this.compSpecContent = null; this.specValidated = false } resetFile(){ this.myInputVariable.nativeElement.value = ""; this.compSpecContent = null this.compSpecSelected = null this.specValidated = false } specValidationOutputHeader = '' specValidationOutputMessage = ''; validateSpec(){ this.specValidationOutputHeader = "" this.specValidationOutputMessage = "" this.specValidationOutputSummary = "" this.spinnerService.show() this.validateJsonStructure() this.specValidator.sendSpecFile(this.compSpecContent, this.type, this.release).subscribe( res => {}, err => { this.setSpecValidationMessage(err) } ) } setSpecValidationMessage(res){ if(res.status === 200){ this.specValidationOutputHeader = "Success: Valid Component Spec" this.specValidationOutputMessage = "" this.validCompSpec = true } else { this.specValidationOutputHeader = `${res.status} Error: Invalid Component Spec` this.specValidationOutputSummary = res.error.summary for(let item of res.error.errors){ this.specValidationOutputMessage += `- ${item}\n\n` } this.validCompSpec = false } this.specValidated = true; this.spinnerService.hide() } validateJsonStructure() { try { JSON.parse(this.compSpecContent); } catch (error) { this.specValidationOutputHeader = "Error: Invalid Component Spec" this.specValidationOutputSummary = "JSON Structure Error" this.specValidationOutputMessage = error this.validCompSpec = false this.specValidated = true this.spinnerService.hide() throw new Error('JSON Structure error, quit!'); } } downloadSchema(){ this.spinnerService.show() this.specValidator.getSchema(this.type).subscribe( res => { this.downloadService.downloadJSON(res, `${this.release}+_${this.type}_Schema`) this.spinnerService.hide() }, err => { console.log(err) this.spinnerService.hide() } ) } }