Fix mod ui build issues
[dcaegen2/platform.git] / mod2 / ui / src / app / comp-spec-validation / comp-spec-validation.component.ts
diff --git a/mod2/ui/src/app/comp-spec-validation/comp-spec-validation.component.ts b/mod2/ui/src/app/comp-spec-validation/comp-spec-validation.component.ts
new file mode 100644 (file)
index 0000000..2ce8fef
--- /dev/null
@@ -0,0 +1,145 @@
+/* 
+ *  # ============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()
+      }
+    )
+  }
+}