summaryrefslogtreecommitdiffstats
path: root/mod2/ui/src/app/comp-spec-validation/comp-spec-validation.component.ts
blob: 2ce8fef3e25cfaa6fd0cfb2b2bd5add33c1128f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<
/* 
 *  # ============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()
      }
    )
  }
}