2 ============LICENSE_START==========================================
3 ===================================================================
4 Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
6 Copyright (C) 2018 IBM Intellectual Property. All rights reserved.
7 ===================================================================
8 Copyright (C) 2018 IBM.
9 ===================================================================
11 Unless otherwise specified, all software contained herein is licensed
12 under the Apache License, Version 2.0 (the License);
13 you may not use this software except in compliance with the License.
14 You may obtain a copy of the License at
16 http://www.apache.org/licenses/LICENSE-2.0
18 Unless required by applicable law or agreed to in writing, software
19 distributed under the License is distributed on an "AS IS" BASIS,
20 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 See the License for the specific language governing permissions and
22 limitations under the License.
24 ============LICENSE_END============================================
27 import { Component, OnInit, ViewChild } from '@angular/core';
28 import { saveAs } from 'file-saver';
29 import { ParamShareService } from '../../../shared/services/paramShare.service';
30 import { MappingEditorService } from '../../../shared/services/mapping-editor.service';
31 import { ModalComponent } from '../../../shared/modal/modal.component';
32 import { HttpUtilService } from '../../../shared/services/httpUtil/http-util.service';
33 import { UtilityService } from '../../../shared/services/utilityService/utility.service';
34 import { environment } from '../../../../environments/environment';
35 import { NotificationsService } from 'angular2-notifications';
36 import { ParameterDefinitionService } from './parameter-definition.service';
37 import 'rxjs/add/operator/map';
38 import { NgProgress } from 'ngx-progressbar';
39 import { NgxSpinnerService } from 'ngx-spinner';
40 import { appConstants } from '../../../../constants/app-constants';
42 let YAML = require('yamljs');
47 selector: 'parameter-form',
48 templateUrl: './parameter.component.html',
49 styleUrls: ['../reference-dataform/reference-dataform.component.css'],
50 providers: [ParameterDefinitionService]
52 export class ParameterComponent implements OnInit {
53 public paramForm: any;
54 public actionType: any;
55 public showFilterFields: boolean;
56 public filterByFieldvalues = appConstants.filterByFieldvalues;
57 public ruleTypeConfiguaration = appConstants.ruleTypeConfiguaration;
58 public requiredValues: boolean[] = appConstants.requiredValues;
59 public sourceValues = appConstants.sourceValues;
60 public ruleTypeValues = appConstants.ruleTypeValues;
61 public typeValues = appConstants.typeValues;
62 public responseKeyNameValues = appConstants.responseKeyNameValues;
63 public responseKeyValues = appConstants.responseKeyValues;
64 public requestKeyNameValues = appConstants.requestKeyNameValues;
65 public requestKeyValues = appConstants.requestKeyValues;
66 public myKeyFileName = null;
67 public myPdFileName = null;
68 public disposable: any;
69 public confirmation: boolean;
70 public showConfirmation: boolean;
72 apiToken = localStorage['apiToken'];
73 userId = localStorage['userId'];
74 public initialData: any;
75 public intialData: any;
76 public initialAction: any;
77 public item: any = {};
78 public subscription: any;
80 { action: appConstants.Actions.configBackup, value: appConstants.Actions.configBackup },
81 { action: appConstants.Actions.ConfigModify, value: appConstants.Actions.ConfigModify },
82 { action: appConstants.Actions.configRestore, value: appConstants.Actions.configRestore },
83 { action: appConstants.Actions.configure, value: appConstants.Actions.configure },
84 { action: appConstants.Actions.getRunningConfig, value: appConstants.Actions.getRunningConfig },
85 { action: appConstants.Actions.healthCheck, value: appConstants.Actions.healthCheck },
86 { action: appConstants.Actions.startApplication, value: appConstants.Actions.startApplication },
87 { action: appConstants.Actions.stopApplication, value: appConstants.Actions.stopApplication },
88 { action: appConstants.Actions.distributeTraffic, value: appConstants.Actions.distributeTraffic }
90 public uploadTypes = appConstants.uploadTypes;
92 options = appConstants.optionsToNotificationComponent;
93 public vnfcTypeData: string = '';
94 public selectedUploadType: string;
95 @ViewChild(ModalComponent) modalComponent: ModalComponent;
97 public parameterDefinitionMap: { [index: string]: string; } = {};
98 public parameterNameValues = {};
99 public displayParamObjects;
100 public modelParamDefinitionObjects;
104 public refNameObj = {};
107 public appDataObject: any;
108 public downloadDataObject: any;
109 public artifact_fileName = "";
111 private selectedActionReference: any;
113 constructor(private httpService: HttpUtilService,
114 private parameterDefinitionService: ParameterDefinitionService,
115 private paramShareService: ParamShareService,
116 private mappingEditorService: MappingEditorService,
117 private httpUtil: HttpUtilService,
118 private utilService: UtilityService,
119 private nService: NotificationsService,
120 private ngProgress: NgProgress,
121 private spinner: NgxSpinnerService) {
125 this.selectedActionReference = this.parameterDefinitionService.prepareFileName();
126 if (this.selectedActionReference && this.selectedActionReference != undefined) {
128 this.vnfType = this.selectedActionReference.scope['vnf-type'];
129 this.vnfcType = this.selectedActionReference.scope['vnfc-type'];
130 this.protocol = this.selectedActionReference['device-protocol'];
131 this.action = this.selectedActionReference.action;
133 for (let i = 0; i < this.selectedActionReference['artifact-list'].length; i++) {
134 let artifactList = this.selectedActionReference['artifact-list'];
135 if (artifactList[i]['artifact-type'] === 'parameter_definitions') {
136 var artifactName = artifactList[i]['artifact-name'];
137 var artifactNameWithoutExtension = '';
139 artifactNameWithoutExtension = artifactName.substring(0, artifactName.lastIndexOf("."));
141 if (this.mappingEditorService.identifier) {
142 if (artifactNameWithoutExtension.endsWith(this.mappingEditorService.identifier)) {
143 this.artifact_fileName = artifactName;
148 this.artifact_fileName = artifactName;
152 this.parameterDefinitionService.setValues(this.vnfType, this.vnfcType, this.protocol, this.action, this.artifact_fileName);
155 this.selectedActionReference = {
157 'scope': { 'vnf-type': '', 'vnfc-type': '' },
160 'download-dg-reference': '',
164 'deviceTemplate': '',
169 this.template_id = this.mappingEditorService.identifier;
173 if (this.mappingEditorService.latestAction) {
174 this.displayParamObjects = [];
175 this.modelParamDefinitionObjects = [];
176 if (this.paramShareService.getSessionParamData() != undefined && this.paramShareService.getSessionParamData().length > 0) {
177 this.getPDFromSession();
179 this.ngProgress.start();
182 this.ngProgress.done();
186 this.nService.error(appConstants.errors.error, appConstants.errors["noAction&VNFTypeInRDscreenError"]);
188 return this.displayParamObjects;
194 let input=this.utilService.createPayloadForRetrieve(false, this.action, this.vnfType,this.artifact_fileName);
195 let artifactContent: any;
196 return this.httpService.post({
197 url: environment.getDesigns,
199 }).subscribe(data => {
200 if (this.utilService.checkResult(data)) {
201 let result: any = JSON.parse(data.output.data.block).artifactInfo[0];
202 var pdObject = YAML.parse(result['artifact-content']);
203 let fileModel = pdObject['vnf-parameter-list'];
204 this.displayParamObjects = this.parameterDefinitionService.populatePD(fileModel);
209 error => this.nService.error(appConstants.errors.error, appConstants.errors.connectionError));
213 public getPDFromSession() {
215 this.ngProgress.start();
216 return this.httpService.get({
218 }).subscribe(data => {
219 this.displayParamObjects = this.paramShareService.getSessionParamData();
220 this.ngProgress.done();
223 this.displayParamObjects = this.paramShareService.getSessionParamData();
224 this.ngProgress.done();
228 //========================== End of NGInit() Method============================================
229 selectedNavItem(item: any) {
233 //========================== End of selectedNavItem() Method============================================
235 $('#inputFile1').trigger('click');
238 //========================== End of browsePdFile() Method============================================
240 $('#inputFile2').trigger('click');
244 //========================== End of browseKeyFile() Method============================================
247 //========================== End of appendSlashes() Method============================================
250 //========================== End of prepareFileName() Method============================================
252 this.parameterDefinitionService.destroy(this.displayParamObjects);
255 //========================== End of ngOnDestroy() Method============================================
257 public showUpload() {
258 this.selectedUploadType = this.uploadTypes[0].value;
261 //========================== End of showUpload() Method============================================
262 //This is called when the user selects new files from the upload button
263 public fileChange(input, uploadType) {
264 if (input.files && input.files[0]) {
266 // Create the file reader
267 let reader = new FileReader();
268 this.readFile(input.files[0], reader, (result) => {
269 if ('pdfile' === uploadType) {
270 this.myPdFileName = input.files[0].name;
271 this.displayParamObjects = this.parameterDefinitionService.processPDfile(this.myPdFileName, result);
275 /** spinner ends after 3.5 seconds */
281 //========================== End of fileChange() Method============================================
282 public readFile(file, reader, callback) {
283 // Set a callback funtion to fire after the file is fully loaded
284 reader.onload = () => {
285 // callback with the results
286 callback(reader.result);
289 reader.readAsText(file, 'UTF-8');
292 //========================== End of readFile() Method============================================
293 fileChangeEvent(fileInput: any) {
294 let obj: any = fileInput.target.files;
298 sourceChanged(data, obj) {
299 if (data == 'A&AI') {
300 obj.ruleTypeValues = appConstants.ruleTypeValues;
301 for (let x = 0; x < 5; x++) {
302 obj['response-keys'][x]['key-name'] = null;
303 obj['response-keys'][x]['key-value'] = null;
305 } else if (data == 'Manual') {
306 obj.ruleTypeValues = [null];
307 obj['rule-type'] = null;
308 obj.showFilterFields = false;
309 for (let x = 0; x < 5; x++) {
310 obj['response-keys'][x]['key-name'] = null;
311 obj['response-keys'][x]['key-value'] = null;
315 obj.ruleTypeValues = [null];
319 //========================== End of sourceChanged() Method============================================
320 ruleTypeChanged(data, obj) {
321 if (data == null || data == undefined || data == 'null') {
322 obj.showFilterFields = false;
323 obj['rule-type'] = null;
324 for (let x = 0; x < 5; x++) {
325 obj['response-keys'][x]['key-name'] = null;
326 obj['response-keys'][x]['key-value'] = null;
329 let sourceObject = this.ruleTypeConfiguaration[data];
330 if (data == 'vm-name-list' || data == 'vnfc-name-list' || data == 'vnfc-oam-ipv4-address-list') {
331 this.showFilterFields = false;
332 obj.showFilterFields = true;
333 this.filetrByFieldChanged(obj['response-keys'][3]['key-value'], obj);
335 obj.showFilterFields = false;
336 obj['response-keys'][3]['key-name'] = null;
337 obj['response-keys'][3]['key-value'] = null;
338 obj['response-keys'][4]['key-name'] = null;
339 obj['response-keys'][4]['key-value'] = null;
341 for (let x = 0; x < sourceObject.length; x++) {
342 obj['response-keys'][x]['key-name'] = sourceObject[x]['key-name'];
343 obj['response-keys'][x]['key-value'] = sourceObject[x]['key-value'];
349 //========================== End of ruleTypeChanged() Method============================================
350 filetrByFieldChanged(data, obj) {
351 if (data == null || data == undefined || data == 'null') {
352 obj.enableFilterByValue = false;
353 obj['response-keys'][4]['key-value'] = null;
355 obj.enableFilterByValue = true;