From eedac3e312c66499ca5ff9d72388c31b25813225 Mon Sep 17 00:00:00 2001 From: Patrick Brady Date: Wed, 6 Mar 2019 12:11:34 -0800 Subject: Revert "multiple asible servers support" Some functionality was accidentally removed This reverts commit 611c9da62c2e266f9facd97dc9f340ce311060a3. Change-Id: I1aefbbc0ede8cdda59acc8bdf7b047e506aad813 Signed-off-by: Patrick Brady Issue-ID: APPC-1510 --- package.json | 4 +- src/app/about-us/aboutus.component.css | 3 +- src/app/about-us/aboutus.component.html | 21 +- src/app/about-us/aboutus.component.ts | 57 +- src/app/app.module.ts | 44 +- src/app/cdt.application.properties.json | 8 + src/app/home/home/home.component.html | 8 +- src/app/pipes/vm-filtering.pipe.ts | 25 +- .../components/navigation/navigation.component.ts | 11 +- src/app/shared/confirmModal/confirm.component.ts | 22 +- src/app/shared/pipes/vm-filtering.pipe.ts | 24 +- src/app/shared/services/cdt.apicall.ts | 52 - .../shared/services/httpUtil/http-util.service.ts | 9 +- src/app/shared/services/mapping-editor.service.ts | 57 +- src/app/shared/services/procOnSrvSide.service.ts | 343 ----- src/app/shared/shared.module.ts | 31 +- src/app/test/test.component.html | 18 +- src/app/test/test.component.ts | 234 +-- .../vnfs/LoginGuardService/Login-guard-service.ts | 6 +- src/app/vnfs/auth-guard-modal/auth-guard-modal.ts | 3 +- .../build-artifacts/build-artifacts.component.html | 8 +- .../build-artifacts/build-artifacts.component.ts | 48 +- .../parameter-definition.service.ts | 145 +- .../parameter-definitions/parameter.component.html | 7 +- .../parameter-definitions/parameter.component.ts | 118 +- .../reference-dataform.component.css | 5 +- .../reference-dataform.component.html | 100 +- .../reference-dataform.component.ts | 1489 ++++++++++---------- .../reference-dataform/reference-dataform.util.ts | 15 +- .../param-name-value.component.html | 23 +- .../param-name-value/param-name-value.component.ts | 106 +- .../template-configuration.component.css | 12 - .../template-configuration.component.html | 35 +- .../template-configuration.component.ts | 553 ++++---- src/app/vnfs/myvnfs/myvnfs.component.css | 5 +- src/app/vnfs/myvnfs/myvnfs.component.html | 28 +- src/app/vnfs/myvnfs/myvnfs.component.ts | 67 +- .../userlogin-form/userlogin-form.component.css | 7 +- .../userlogin-form/userlogin-form.component.html | 6 +- .../userlogin-form/userlogin-form.component.ts | 21 - src/app/vnfs/vnfs.module.ts | 73 +- src/cdt.application.properties.json | 15 - src/styles.css | 70 +- 43 files changed, 1562 insertions(+), 2374 deletions(-) create mode 100644 src/app/cdt.application.properties.json delete mode 100644 src/app/shared/services/cdt.apicall.ts delete mode 100644 src/app/shared/services/procOnSrvSide.service.ts delete mode 100644 src/cdt.application.properties.json diff --git a/package.json b/package.json index 6771223..8041857 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,8 @@ "file-saver": "^1.3.3", "font-awesome": "^4.7.0", "jquery": "^3.2.1", - "mdbootstrap": "4.5.5", - "ng2-ace-editor": "0.2.0", + "mdbootstrap": "4.5.3", + "ng2-ace-editor": "0.1.9", "ng2-bootstrap-modal": "1.0.1", "ng2-bs3-modal": "0.10.4", "ngx-progressbar": "^2.1.1", diff --git a/src/app/about-us/aboutus.component.css b/src/app/about-us/aboutus.component.css index 225877c..93ac11c 100644 --- a/src/app/about-us/aboutus.component.css +++ b/src/app/about-us/aboutus.component.css @@ -20,7 +20,8 @@ limitations under the License. ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ + .textarea { - width: 100%; + width: 800px; height: 200px } \ No newline at end of file diff --git a/src/app/about-us/aboutus.component.html b/src/app/about-us/aboutus.component.html index 0d641b9..d7460f3 100644 --- a/src/app/about-us/aboutus.component.html +++ b/src/app/about-us/aboutus.component.html @@ -30,8 +30,7 @@ limitations under the License.      @@ -62,7 +61,7 @@ limitations under the License. @@ -71,19 +70,3 @@ limitations under the License. - - - - - - - - - - - - - - diff --git a/src/app/about-us/aboutus.component.ts b/src/app/about-us/aboutus.component.ts index 53b8a94..04eee0d 100644 --- a/src/app/about-us/aboutus.component.ts +++ b/src/app/about-us/aboutus.component.ts @@ -21,13 +21,16 @@ limitations under the License. ============LICENSE_END============================================ */ -import { Component, OnInit } from '@angular/core'; + +import { Component, OnInit, OnDestroy } from '@angular/core'; import { Http } from '@angular/http'; import { Subscription } from 'rxjs/Subscription'; import { Observable } from 'rxjs/Observable'; import { NotificationsService } from 'angular2-notifications'; import { saveAs } from 'file-saver'; -import { ModalDismissReasons, NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { DialogService } from 'ng2-bootstrap-modal'; +import { ConfirmComponent } from '../shared/confirmModal/confirm.component'; +import { appConstants } from '../../constants/app-constants'; import {UtilityService} from '../shared/services/utilityService/utility.service'; @Component({ @@ -35,13 +38,11 @@ import {UtilityService} from '../shared/services/utilityService/utility.service' templateUrl: './aboutus.component.html', styleUrls: ['./aboutus.component.css'] }) -export class AboutUsComponent implements OnInit { - +export class AboutUsComponent implements OnInit, OnDestroy { clName= "AboutUsComponent"; public releaseName: any; public versionNo: any; public contactUsMail: any; - public data: any; closeResult: string; versionLogSubscription: Subscription; @@ -54,30 +55,48 @@ export class AboutUsComponent implements OnInit { }; constructor( - private http: Http, private modalService: NgbModal, + private http: Http, private dialogService: DialogService, private notificationsService: NotificationsService, private utilSvc: UtilityService ) { } ngOnInit() { this.versionNo = require('./appVersion.json').versionNo; this.releaseName = require('./appVersion.json').releaseName; - this.contactUsMail = require('../../cdt.application.properties.json').CONTACT_US; + this.contactUsMail = require('../cdt.application.properties.json').CONTACT_US; + } + + ngOnDestroy() { + if (this.versionLogSubscription) { + this.versionLogSubscription.unsubscribe(); + } } - versionLogFile() { - this.http.get('app/about-us/versionLog.txt') - .subscribe(res => this.data = res.text()); + versionLogFile(): Observable { + return this.http.get('app/about-us/versionLog.txt'); } - // open(content) { - // this.modalService.open(content).result.then((result) => { - // console.log('result', result) - // this.closeResult = `Closed with: ${ result }`; - // }, (reason) => { - // console.log('reson', reason) - // this.closeResult = `Dismissed ${ this.getDismissReason(reason) }`; - // }); - // } + open(content) { + this.versionLogSubscription = this.versionLogFile() + .subscribe((res) => { + this.data = res.text(); + this.dialogService.addDialog(ConfirmComponent, { + title: 'VERSION CHANGE LOG', + message: this.data, + cancelButtonText: 'CLOSE', + confirmButtonText: 'DOWNLOAD' + }).subscribe(isConfirmed => { + if (isConfirmed) { + this.downloadLogFile() + } else { + // do nothing + } + }); + + }, + (error)=>{ + this.notificationsService.error(appConstants.errors.error, 'unable to fetch change log details'); + }); + } downloadLogFile() { var blob = new Blob([this.data], { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index d142ac2..fcff1d5 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -22,34 +22,36 @@ limitations under the License. ============LICENSE_END============================================ */ -import {BrowserModule} from '@angular/platform-browser'; -import {NgModule} from '@angular/core'; -import {FormsModule} from '@angular/forms'; -import {SimpleNotificationsModule} from 'angular2-notifications'; -import {HomeModule} from './home/home.module'; -import {AppComponent} from './app.component'; -import {AppRoutingModule} from './app.routing'; -import {SharedModule} from './shared/shared.module'; -import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; -import {HashLocationStrategy, LocationStrategy} from '@angular/common'; -import {NoopAnimationsModule} from '@angular/platform-browser/animations'; -import {RouterModule} from '@angular/router'; -import {TestComponent} from './test/test.component'; -import {AboutUsComponent} from './about-us/aboutus.component'; -import {NgProgressModule} from 'ngx-progressbar'; -import {LoginGuardService} from './vnfs/LoginGuardService/Login-guard-service'; -import {Ng2Bs3ModalModule} from 'ng2-bs3-modal/ng2-bs3-modal'; +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { SimpleNotificationsModule } from 'angular2-notifications'; +import { BootstrapModalModule } from 'ng2-bootstrap-modal'; +import { HomeModule } from './home/home.module'; +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app.routing'; +import { SharedModule } from './shared/shared.module'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { HashLocationStrategy, LocationStrategy } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterModule } from '@angular/router'; +import { TestComponent } from './test/test.component'; +import { AboutUsComponent } from './about-us/aboutus.component'; +import { NgProgressModule } from 'ngx-progressbar'; +import { LoginGuardService } from './vnfs/LoginGuardService/Login-guard-service'; +import { ConfirmComponent } from './shared/confirmModal/confirm.component'; import { NgxSpinnerModule } from 'ngx-spinner'; @NgModule({ - declarations: [AppComponent, TestComponent, AboutUsComponent], + declarations: [AppComponent, TestComponent, AboutUsComponent, ConfirmComponent], imports: [BrowserModule, FormsModule, HomeModule, SharedModule.forRoot(), - NgbModule.forRoot(), NoopAnimationsModule, AppRoutingModule, SimpleNotificationsModule, NgProgressModule, Ng2Bs3ModalModule, NgxSpinnerModule], + NgbModule.forRoot(), NoopAnimationsModule, AppRoutingModule, SimpleNotificationsModule, NgProgressModule, BootstrapModalModule, NgxSpinnerModule], exports: [RouterModule], - providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}, LoginGuardService], + providers: [{ provide: LocationStrategy, useClass: HashLocationStrategy }, LoginGuardService], + entryComponents: [ConfirmComponent], bootstrap: [AppComponent] }) export class AppModule { -} \ No newline at end of file +} diff --git a/src/app/cdt.application.properties.json b/src/app/cdt.application.properties.json new file mode 100644 index 0000000..5040526 --- /dev/null +++ b/src/app/cdt.application.properties.json @@ -0,0 +1,8 @@ +{ + "CONTACT_US": { + "CONTACT_US_EMAIL": "cdtSupportTeam@yourCompany.com", + "CONTACT_US_SUBJECT": "CDT Contact Us" + }, + "username": "admin", + "password": "admin" +} \ No newline at end of file diff --git a/src/app/home/home/home.component.html b/src/app/home/home/home.component.html index ce6ec78..78189e5 100644 --- a/src/app/home/home/home.component.html +++ b/src/app/home/home/home.component.html @@ -20,14 +20,12 @@ limitations under the License. ============LICENSE_END============================================ -->
-
WELCOME TO CONTROLLER DESIGN TOOL +
WELCOME TO CONTROLLER DESIGN TOOL
-

The Controller Design Tool allows technology owners to create artifacts for Configuration and Life Cycle Management functions that are required - to manage the lifecycle of Virtual Network Functions (VNFs).
Select My VNFS to enter credentials and view existing designs or create new - ones. +

The Controller Design Tool allows technology owners to create artifacts for Configuration and Life Cycle Management functions that are required to manage the lifecycle of Virtual Network Functions (VNFs).
Select My VNFS to enter credentials and view existing designs or create new ones.

-
\ No newline at end of file +
diff --git a/src/app/pipes/vm-filtering.pipe.ts b/src/app/pipes/vm-filtering.pipe.ts index a036799..fdeb272 100644 --- a/src/app/pipes/vm-filtering.pipe.ts +++ b/src/app/pipes/vm-filtering.pipe.ts @@ -19,33 +19,20 @@ limitations under the License. ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ -import { Pipe, PipeTransform } from '@angular/core'; +import {Pipe, PipeTransform} from '@angular/core'; -@Pipe({ name: 'vmFiltering', pure: false }) +@Pipe({name: 'vmFiltering', pure: false}) export class VmFilteringPipe implements PipeTransform { - transform(value: any, action: any, templateId, newVnfc): any { - let filterValue - if(action == 'ConfigScaleOut'){ - filterValue= templateId - } else if(action == 'Configure' || action == 'ConfigModify'){ - filterValue= newVnfc - } - if (action == 'ConfigScaleOut') { - let x = value.filter(obj => { - //return value - return obj['template-id'] == filterValue; - }); + transform(value: any, action: any, templateId): any { - - return x; - } else if( action == 'Configure' || action == 'ConfigModify'){ + if (action == 'ConfigScaleOut') { let x = value.filter(obj => { //return value - return ( obj['vnfcType-id'] == filterValue || obj['vnfcType-id'] == undefined); + return obj['template-id'] == templateId; }); - + console.log(x); return x; } else { return value; diff --git a/src/app/shared/components/navigation/navigation.component.ts b/src/app/shared/components/navigation/navigation.component.ts index af80749..522b11a 100644 --- a/src/app/shared/components/navigation/navigation.component.ts +++ b/src/app/shared/components/navigation/navigation.component.ts @@ -24,15 +24,14 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. */ -import {Component, Input, OnInit} from '@angular/core'; -import {Router} from '@angular/router'; -import {EmitterService} from '../../services/emitter.service'; +import { Component, Input, OnInit, OnDestroy } from '@angular/core'; +import { Router } from '@angular/router'; import { Subscription } from 'rxjs/Subscription'; +import { EmitterService } from '../../services/emitter.service'; - -@Component({selector: 'app-navigation', templateUrl: './navigation.component.html', styleUrls: ['./navigation.component.css']}) -export class NavigationComponent implements OnInit { +@Component({ selector: 'app-navigation', templateUrl: './navigation.component.html', styleUrls: ['./navigation.component.css'] }) +export class NavigationComponent implements OnInit, OnDestroy { navigationTabs: Array = []; //@ViewChild(GoldenConfigurationComponent) goldenConfig: GoldenConfigurationComponent; @Input() id: string; diff --git a/src/app/shared/confirmModal/confirm.component.ts b/src/app/shared/confirmModal/confirm.component.ts index 9da7991..5fbf4b3 100644 --- a/src/app/shared/confirmModal/confirm.component.ts +++ b/src/app/shared/confirmModal/confirm.component.ts @@ -28,6 +28,8 @@ import { DialogComponent, DialogService } from 'ng2-bootstrap-modal'; export interface ConfirmModel { title: string; message: string; + cancelButtonText: string; + confirmButtonText: string; } @Component({ @@ -36,15 +38,15 @@ export interface ConfirmModel { ` @@ -52,20 +54,22 @@ export interface ConfirmModel { export class ConfirmComponent extends DialogComponent implements ConfirmModel { title: string; message: string; + cancelButtonText: string; + confirmButtonText: string; constructor(dialogService: DialogService) { super(dialogService); } - onConfirm() { - // we set dialog result as true on click on Yes button, + confirm() { + // we set dialog result as true on click on confirm button, // then we can get dialog result from caller code this.result = true; this.close(); } - onCancel() { - // we set dialog result as false on click on Yes button, + cancel() { + // we set dialog result as false on click on cancel/close button, // then we can get dialog result from caller code this.result = false; this.close(); diff --git a/src/app/shared/pipes/vm-filtering.pipe.ts b/src/app/shared/pipes/vm-filtering.pipe.ts index a036799..c20397b 100644 --- a/src/app/shared/pipes/vm-filtering.pipe.ts +++ b/src/app/shared/pipes/vm-filtering.pipe.ts @@ -19,33 +19,19 @@ limitations under the License. ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ -import { Pipe, PipeTransform } from '@angular/core'; +import {Pipe, PipeTransform} from '@angular/core'; -@Pipe({ name: 'vmFiltering', pure: false }) +@Pipe({name: 'vmFiltering', pure: false}) export class VmFilteringPipe implements PipeTransform { - transform(value: any, action: any, templateId, newVnfc): any { - let filterValue - if(action == 'ConfigScaleOut'){ - filterValue= templateId - } else if(action == 'Configure' || action == 'ConfigModify'){ - filterValue= newVnfc - } - if (action == 'ConfigScaleOut') { - let x = value.filter(obj => { - //return value - return obj['template-id'] == filterValue; - }); + transform(value: any, action: any, templateId): any { - - return x; - } else if( action == 'Configure' || action == 'ConfigModify'){ + if (action == 'ConfigScaleOut') { let x = value.filter(obj => { //return value - return ( obj['vnfcType-id'] == filterValue || obj['vnfcType-id'] == undefined); + return obj['template-id'] == templateId; }); - return x; } else { return value; diff --git a/src/app/shared/services/cdt.apicall.ts b/src/app/shared/services/cdt.apicall.ts deleted file mode 100644 index 9d7fbc2..0000000 --- a/src/app/shared/services/cdt.apicall.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* -============LICENSE_START========================================== -=================================================================== -Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. -=================================================================== - -Unless otherwise specified, all software contained herein is licensed -under the Apache License, Version 2.0 (the License); -you may not use this software 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. - -ECOMP is a trademark and service mark of AT&T Intellectual Property. -============LICENSE_END============================================ -*/ - - -import {Injectable} from '@angular/core'; -import {NotificationsService} from 'angular2-notifications'; -import { HttpUtilService } from './httpUtil/http-util.service'; -import { environment } from '../../../environments/environment'; - - -@Injectable() -export class APIService { - - constructor(private notificationService: NotificationsService, private httpUtils: HttpUtilService) { - } - - public callGetArtifactsApi(payloadData){ - console.log("APIService: PAYLOAD====>"+JSON.stringify(payloadData)); - return this.httpUtils.post({ - url: environment.getDesigns, - data: payloadData - })/*.subscribe(response => { - if (this.checkResult(response, action, artifactType)) { - //Call the respective response handler. - } - }, - error => this.notificationService.error('Error', this.connectionErrorMessage))*/ - } - - - -} diff --git a/src/app/shared/services/httpUtil/http-util.service.ts b/src/app/shared/services/httpUtil/http-util.service.ts index 688f3ea..43e6d4f 100644 --- a/src/app/shared/services/httpUtil/http-util.service.ts +++ b/src/app/shared/services/httpUtil/http-util.service.ts @@ -28,22 +28,23 @@ import { Http, Response, Headers, RequestOptions } from '@angular/http'; export class HttpUtilService { headers: Headers; options: RequestOptions - private username = require('../../../../cdt.application.properties.json').username; - private password = require('../../../../cdt.application.properties.json').password; + private username = require('../../../cdt.application.properties.json').username; + private password = require('../../../cdt.application.properties.json').password; constructor(private http: Http) { this.headers = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON + this.options = new RequestOptions({headers: this.headers}); // } - get(req) { + get(req) { return this .http .get(req.url, this.options) .map((res: Response) => res.json()) } + post(req) { this.headers.append('Authorization', 'Basic ' + btoa(this.username + ':' + this.password)); this.options = new RequestOptions({ headers: this.headers }); - return this .http .post(req.url, req.data, this.options) diff --git a/src/app/shared/services/mapping-editor.service.ts b/src/app/shared/services/mapping-editor.service.ts index cb47687..b9e2b53 100644 --- a/src/app/shared/services/mapping-editor.service.ts +++ b/src/app/shared/services/mapping-editor.service.ts @@ -68,11 +68,11 @@ export class MappingEditorService { public latestAction: any; public selectedWord: any; identifier: any; - private selectedVNFCType; private _navItem = {}; private _observer: Observer; private referenceList = []; - newObject: any + newObject: any; + constructor() { this.navChange$ = new Observable(observer => this._observer = observer).share(); @@ -106,20 +106,12 @@ export class MappingEditorService { } selectedObj(data) { this.newObject = data; - } + saveLatestIdentifier(identifier) { this.identifier = identifier; } - setSelectedVNFCType(vnfcType) { - this.selectedVNFCType = vnfcType; - } - - getSelectedVNFCType() { - return this.selectedVNFCType; - } - public getParamContent() { return this.paramContent; } @@ -137,15 +129,15 @@ export class MappingEditorService { } - public initialise(editor: any, editorContent: string): void { + public initialise(editor: any, editorContent: string, modal: any): void { this.editor = editor; this.editor.session = editor.session; this.editor.selection.session.$backMarkers = {}; this.editorContent = editorContent; this.editor.$blockScrolling = Infinity; this.editor.$blockSelectEnabled = false; - //this.initialiseCommands(modal); - //this.editor.setValue(this.editorContent); + this.initialiseCommands(modal); + this.editor.setValue(this.editorContent); this.refreshEditor(); } @@ -206,7 +198,7 @@ export class MappingEditorService { for (var prop in paramJson) { let value: string = paramJson[prop]; if (value) { - var occurances = this.editor.findAll(value, { regExp: false }); + var occurances = this.editor.findAll(value, {regExp: false}); var ranges = this.editor.getSelection().getAllRanges(); if (ranges && occurances && occurances > 0) { @@ -269,8 +261,8 @@ export class MappingEditorService { selectedRange.start.column = selectedRange.start.column - 1; selectedRange.end.column = selectedRange.end.column + 1; if ((this.editor.session.getTextRange(selectedRange).startsWith(' ') - || this.editor.session.getTextRange(selectedRange).startsWith('"') - || this.editor.session.getTextRange(selectedRange).startsWith('>')) + || this.editor.session.getTextRange(selectedRange).startsWith('"') + || this.editor.session.getTextRange(selectedRange).startsWith('>')) && (this.editor.session.getTextRange(selectedRange).endsWith(' ') || this.editor.session.getTextRange(selectedRange).endsWith('"') || this.editor.session.getTextRange(selectedRange).endsWith(',') @@ -321,7 +313,7 @@ export class MappingEditorService { } public autoAnnotateTemplateForParam(): void { - var occurances = this.editor.findAll(this.T_KEY_EXPRESSION, { regExp: true }); + var occurances = this.editor.findAll(this.T_KEY_EXPRESSION, {regExp: true}); var ranges = this.editor.getSelection().getAllRanges(); if (ranges) { for (var r = 0; r < ranges.length; r++) { @@ -370,25 +362,19 @@ export class MappingEditorService { } replaceNamesWithBlankValues() { - var occurances = this.editor.findAll(this.SYNC_T_KEY_EXPRESSION, { regExp: true }); + var occurances = this.editor.findAll(this.SYNC_T_KEY_EXPRESSION, {regExp: true}); var ranges = this.editor.getSelection().getAllRanges(); if (occurances > 0) { if (ranges) { for (var r = 0; r < ranges.length; r++) { let selectedRange: any = ranges[r]; - // console.log("Selected range == " + selectedRange) let selectedWord: string = this.editor.session.getTextRange(selectedRange); let specialKeys = (selectedWord.substring(2, selectedWord.length - 1)).match(this.checkSpecialCharsReg); - // console.log("Selected word == " + selectedWord.length) - //if (!selectedWord.startsWith('<') || !selectedWord.startsWith('{')) { - if (specialKeys && specialKeys.length) { - } - - else if (selectedWord && this.checkAppliedForNamesOnly(selectedRange) && !specialKeys && this.checkComments(selectedRange)) { + if (selectedWord && this.checkAppliedForNamesOnly(selectedRange) && !specialKeys) { let replaceWord: any = this.KEY_START + '' + this.KEY_MID + selectedWord.substring(2, selectedWord.length - 1) + this.KEY_END; this.editor.session.replace(selectedRange, replaceWord); } - // } + } } } @@ -402,8 +388,7 @@ export class MappingEditorService { this.hasErrorCode = false; for (var r = 0; r < ranges.length; r++) { let keyValue: string = this.editor.session.getTextRange(ranges[r]); - //console.log("keyValues==="+keyValue) - if (this.checkComments(ranges[r]) && keyValue && keyValue.startsWith(this.KEY_START) && keyValue.endsWith(this.KEY_END) && keyValue.includes(this.KEY_MID)) { + if (keyValue && keyValue.startsWith(this.KEY_START) && keyValue.endsWith(this.KEY_END) && keyValue.includes(this.KEY_MID)) { let key: string = keyValue.substring(keyValue.indexOf(this.KEY_MID) + this.KEY_MID_LENGTH, keyValue.indexOf(this.KEY_END)); let value: string = keyValue.substring(this.KEY_START_LENGTH, keyValue.indexOf(this.KEY_MID)); let specialKeys = key.match(this.checkSpecialCharsReg); @@ -413,7 +398,7 @@ export class MappingEditorService { if (this.fromScreen === 'TemplateScreen') { if (key) { paramJson[key] = value; - var obj: any = { 'paramName': '', 'paramValue': '' }; + var obj: any = {'paramName': '', 'paramValue': ''}; obj.paramName = key; obj.paramValue = value; paramData.push(obj); @@ -423,7 +408,7 @@ export class MappingEditorService { else if (this.fromScreen === 'MappingScreen') { if (key) { paramJson[key] = value; - var obj: any = { 'paramName': '', 'paramValue': '' }; + var obj: any = {'paramName': '', 'paramValue': ''}; obj.paramName = key; obj.paramValue = value; @@ -464,13 +449,13 @@ export class MappingEditorService { public refreshMarker(): void { if (this.editor) { this.hasErrorCode = false; - var occurances = this.editor.findAll(this.KEY_EXPRESSION, { regExp: true }); + var occurances = this.editor.findAll(this.KEY_EXPRESSION, {regExp: true}); var ranges = this.editor.getSelection().getAllRanges(); var keysList = []; // Populate missing keys for (var r = 0; r < ranges.length; r++) { let keyValue: string = this.editor.session.getTextRange(ranges[r]); - if (this.checkComments(ranges[r]) && keyValue && keyValue.startsWith(this.KEY_START) && keyValue.endsWith(this.KEY_END) && keyValue.includes(this.KEY_MID)) { + if (keyValue && keyValue.startsWith(this.KEY_START) && keyValue.endsWith(this.KEY_END) && keyValue.includes(this.KEY_MID)) { let key: string = keyValue.substring(keyValue.indexOf(this.KEY_MID) + this.KEY_MID_LENGTH, keyValue.indexOf(this.KEY_END)); let value: string = keyValue.substring(this.KEY_START_LENGTH, keyValue.indexOf(this.KEY_MID)); let specialKeys = key.match(this.checkSpecialCharsReg); @@ -523,7 +508,7 @@ export class MappingEditorService { public generateTemplate(templateEditor: any): void { if (templateEditor) { templateEditor.setValue(this.editor.getValue()); - var occurances = templateEditor.findAll(this.KEY_EXPRESSION, { regExp: true }); + var occurances = templateEditor.findAll(this.KEY_EXPRESSION, {regExp: true}); var ranges = templateEditor.getSelection().getAllRanges(); if (ranges) { for (var r = 0; r < ranges.length; r++) { @@ -547,7 +532,7 @@ export class MappingEditorService { public generateParams(paramsEditor: any, paramsKeyValueEditor: any): JSON { if (paramsEditor && paramsKeyValueEditor) { - var occurances = this.editor.findAll(this.KEY_EXPRESSION, { regExp: true }); + var occurances = this.editor.findAll(this.KEY_EXPRESSION, {regExp: true}); var ranges = this.editor.getSelection().getAllRanges(); if (ranges) { let paramsJSON: JSON = JSON.parse('{}'); @@ -608,4 +593,4 @@ export class MappingEditorService { } -} \ No newline at end of file +} diff --git a/src/app/shared/services/procOnSrvSide.service.ts b/src/app/shared/services/procOnSrvSide.service.ts deleted file mode 100644 index 17666d3..0000000 --- a/src/app/shared/services/procOnSrvSide.service.ts +++ /dev/null @@ -1,343 +0,0 @@ -//.. processing document on the server side -import { Injectable } from '@angular/core'; -//import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Http, Response, Headers, RequestOptions } from '@angular/http'; -import { Observable } from 'rxjs'; -import { NotificationsService } from 'angular2-notifications'; - -import { UtilityService } from '../../shared/services/utilityService/utility.service'; - -//const httpOptionsT = { - // headers: new HttpHeaders({ 'Content-Type': 'text/plain' }) -//}; - -@Injectable( -// { providedIn: 'root' } -) -export class ProcOnSrvSideSvc -{ - clName: string = "ProcOnSrvSideSvc"; - public theUrl: string = "/api/proc_cont"; - public resUrlPfx: string = "/api/get_result"; - public parmsUrlPfx: string = "/api/get_params"; - public taskId: string = ''; - public stringBuf: string; - public responBuf: string; - public procResult: string; - public parmsBuf: string; - public responObj: any; - // private respObs: Observable; - private respObs: Observable; - private respObsObj: Observable; - public ppartLen: number = 102400; //.. 102912 is too large payload - // public ppartLen: number = 10240; - public ppartCnt: number = 0; - public p_offset: number = 0; - public interval: any; - cycleCnt: number; - cycleMAX: number = 40; - editorHolder: any; - templSyncer: any; - fHeaders: Headers; - rOptions: RequestOptions; - noptions = { - timeOut: 4000, - showProgressBar: true, - pauseOnHover: true, - clickToClose: true, - maxLength: 250 - }; - prevTstampInt: number = 0; - currTstampInt: number = 0; - notifDelayMsec: number = 1200; - - constructor( - // private http: HttpClient, - private http: Http, - private utilSvc: UtilityService, - private nService: NotificationsService ) - { - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": new: start"); - this.fHeaders= new Headers({'Content-Type': 'text/plain'}); - this.rOptions= new RequestOptions({'responseType':0}); - } - - sendToSrv( content: string, editorHolder: any, templSyncer: any ) { - var methName= "sendToSrv"; - this.stringBuf= content; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": start: content length="+ - this.stringBuf.length ); - this.editorHolder= editorHolder; - this.templSyncer= templSyncer; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": emptying editor..."); - this.editorHolder.editor.session.setValue("temp empty"); - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": theUrl:["+this.theUrl+"]"); - this.nService.info( "Start processing", - "sending: content length="+this.stringBuf.length, this.noptions ); - this.taskId= ''; - let contLen= this.stringBuf.length; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": content length="+contLen+ - " ppartLen="+this.ppartLen ); - this.ppartCnt= 1+ Math.floor(contLen / this.ppartLen); - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": ppartCnt="+ this.ppartCnt ); - if( this.ppartCnt > 1 ) { - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": will send multiple parts..."); - this.nService.info( "Start processing", "will send multiple parts..."); - this.prevTstampInt= Date.now(); - this.p_offset= 0; - let ppart= this.stringBuf.substr( this.p_offset, this.ppartLen ); - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": First part:["+ppart+"]"); - //.. first - this.sendPart( this.theUrl, ppart, 1 ); - } - else { //.. ppartCnt == 1 - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": will send all-in-1"); - this.nService.info( "Start processing", - "will send all-in-1 part", this.noptions); - this.prevTstampInt= Date.now(); - //.. single - var sUrl= this.theUrl+"?part=1of1"; - this.sendPart( sUrl, this.stringBuf, 1 ); - }; - } - - sendPart( postUrl: string, contPart: string, partNum: number ) { - var methName= "sendPart"; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": start: Url:["+postUrl+"]"); - this.currTstampInt= Date.now(); - let ntDiff= this.currTstampInt - this.prevTstampInt; - if( this.utilSvc.getTracelvl() > 1 ) - console.log( this.clName+": "+methName+ - ": prevTstampInt="+this.prevTstampInt+ - " currTstampInt="+this.currTstampInt+" the diff="+ntDiff ); - if( ntDiff > this.notifDelayMsec ) { - if( this.utilSvc.getTracelvl() > 1 ) - console.log(this.clName+": "+methName+": notif.delay's long enough."); - this.prevTstampInt= this.currTstampInt; - this.nService.info( "Transferring file", - " part Number="+partNum, this.noptions ); - }; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": part length="+ contPart.length ); - this.respObs= - this.http.post( postUrl, contPart, this.rOptions ); - // this.http.post( postUrl, contPart, httpOptionsT ); - // this.respObs.subscribe( (respo: string) => { - this.respObs.subscribe( (respo: Response) => { - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": got response:["+respo+"]"); - if( this.utilSvc.getTracelvl() > 1 ) - console.log( this.clName+": "+methName+": json:["+ - JSON.stringify(respo)+"]"); - this.responBuf= respo.text(); - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": responBuf:["+this.responBuf+"]"); - if( this.taskId.length < 1 ) { - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+ - ": taskId is empty -get it from response"); - let respObj= JSON.parse(this.responBuf); - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": respObj.taskId:["+ - respObj.taskId+"]"); - if( respObj.taskId == null || respObj.taskId.length == 0 ) { - let errMsg= this.clName+": "+methName+ - ": Error: failed to get taskId from the server response !"; - console.log( errMsg ); - this.nService.error( "Transferring file", errMsg, this.noptions ); - return; - } - else { //.. extracted respObj.taskId - this.taskId= respObj.taskId; - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": obtained new taskId:["+ - this.taskId+"]"); - this.nService.info( "Transferring file", - "current taskId:["+this.taskId+"]", this.noptions); - }; - }; - let tpercent= (100.0*partNum/this.ppartCnt).toFixed(); - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+ - ": part#="+partNum+" transfer percent="+tpercent ); - this.currTstampInt= Date.now(); - let ntDiff= this.currTstampInt - this.prevTstampInt; - if( this.utilSvc.getTracelvl() > 1 ) - console.log( this.clName+": "+methName+ - ": prevTstampInt="+this.prevTstampInt+ - " currTstampInt="+this.currTstampInt+" the diff="+ntDiff ); - if( ntDiff > this.notifDelayMsec ) { - if( this.utilSvc.getTracelvl() > 1 ) - console.log(this.clName+": "+methName+": notif.delay long enough."); - this.prevTstampInt= this.currTstampInt; - this.nService.info( "Transferring file", - " progress: "+tpercent+" %", this.noptions ); - //" part Number="+partNum+" vs part Count="+this.ppartCnt, this.noptions ); - }; - if( partNum < this.ppartCnt ) { - // this.nService.info( methName,"need to send more parts..."); - let partN= partNum + 1; - this.p_offset= this.p_offset + this.ppartLen; - var ppart= ''; - if( partN < this.ppartCnt ) { - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+ - ": next part is not the last: partN="+partN ); - ppart= this.stringBuf.substr( this.p_offset, this.ppartLen ); - } - else { - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+ ": next part is the last."); - ppart= this.stringBuf.substr( this.p_offset ); - }; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": next part:["+ppart+"]"); - let nUrl= - this.theUrl+"?taskId="+this.taskId+"&part="+partN+"of"+this.ppartCnt; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": next Url:["+nUrl+"]"); - this.sendPart( nUrl, ppart, partN ); - } - else { //.. partNum == this.ppartCnt - this.nService.info( "Transferring file", - "all "+this.ppartCnt+ " parts are sent - check processing...", - this.noptions); - var progrUrl= "/api/get_progress?taskId="+this.taskId; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(this.clName+": "+methName+": progrUrl:["+progrUrl+"]"); - this.showProcProgr( progrUrl ); - }; - }, - error => { - console.log( this.clName+": "+methName+ - ": got Error:["+JSON.stringify(error)+']'); - this.responBuf= JSON.stringify(error); - this.nService.error( "Transferring file", - " Error:["+this.responBuf+"]", this.noptions); - }); - } - - showProcProgr( proUrl: string ) { - var methName= "showProcProgr"; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(methName+": start: proUrl:["+proUrl+"]"); - this.cycleCnt= 0; - this.interval = setInterval( () => { - if( this.utilSvc.getTracelvl() > 1 ) - console.log(methName+": call getProcProgr"); - this.getProcProgr( proUrl ); - }, 2500 ); - } - - getProcProgr( proUrl: string ) { - var methName= "getProcProgr"; - if( this.utilSvc.getTracelvl() > 0 ) - console.log( methName+": getProcProgr: start: proUrl:["+proUrl+"]"); - this.cycleCnt++; - if( this.utilSvc.getTracelvl() > 0 ) - console.log( methName+": cycleCnt="+this.cycleCnt ); - this.nService.info( "Processing", - "Requesting server status...", this.noptions); - // this.respObsObj= - // this.http.get( proUrl ); - this.respObs= - this.http.get( proUrl ); - // this.respObs.subscribe( (respo: string) => { - //this.respObsObj.subscribe( (respo) => { - this.respObs.subscribe( (respo: Response) => { - if( this.utilSvc.getTracelvl() > 0 ) - console.log( methName+": response:["+JSON.stringify(respo)+"]"); - this.responBuf= respo.text(); - if( this.utilSvc.getTracelvl() > 0 ) - console.log( methName+": responBuf:["+this.responBuf+"]"); - let respObj= JSON.parse(this.responBuf); - // this.responObj= respo; //.. Object - if( respObj.percentage != undefined && - respObj.percentage != null ) - { - if( this.utilSvc.getTracelvl() > 0 ) - console.log(methName+": got percentage:["+respObj.percentage+"]"); - if( respObj.percentage >= 100.0 ) { - if( this.utilSvc.getTracelvl() > 0 ) - console.log(methName+": percentage == 100 !"); - this.nService.info( "Processing completed", - "The server finished: 100% !", this.noptions); - clearInterval( this.interval ); - if( this.utilSvc.getTracelvl() > 0 ) - console.log(methName+": getting the processing result..."); - this.getProcResult(); - } - }; - if( this.utilSvc.getTracelvl() > 0 ) - console.log(methName+": cycleCnt="+this.cycleCnt+ - " vs MAX="+this.cycleMAX ); - if( this.cycleCnt > this.cycleMAX ) { - this.nService.error( "Processing", - "Too many status requests - stop !",this.noptions ); - clearInterval( this.interval ); - } - }, - error => { - console.log( this.clName+": "+methName+": got Error:["+ - JSON.stringify(error)+']'); - this.responObj= error; //.. as Object - this.nService.error( "Processing"," Error:["+ - JSON.stringify(error)+']', this.noptions ); - clearInterval( this.interval ); - }); - } - - getProcResult() { - var methName= "getProcResult"; - let resUrl= this.resUrlPfx+"?taskId="+this.taskId; - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": start: resUrl:["+resUrl+"]"); - this.respObs= - this.http.get( resUrl, this.rOptions ); - // this.http.get( resUrl, {responseType: 'text'} ); - // this.respObs.subscribe( (respo: string) => { - this.respObs.subscribe( (respo: Response) => { - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": got response:["+respo+"]"); - if( this.utilSvc.getTracelvl() > 1 ) - console.log( this.clName+": "+methName+": json:["+ - JSON.stringify(respo)+"]"); - this.responBuf= respo.text(); - if( this.utilSvc.getTracelvl() > 1 ) - console.log( this.clName+": "+methName+": responBuf:["+this.responBuf+"]"); - if( this.utilSvc.getTracelvl() == 0 ) { - let respoBg= this.responBuf.substr(0, 300); - console.log(this.clName+": "+methName+": response Begin:["+respoBg+"...]"); - }; - this.procResult= this.responBuf; - this.nService.info( "Processing completed", - "the result length="+this.procResult.length, this.noptions ); - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+ - ": setting response to the editor..."); - this.editorHolder.editor.session.setValue( this.procResult ); - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": calling syncTemplate ..."); - this.templSyncer.syncTemplate('1'); - if( this.utilSvc.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": finished."); - }, - error => { - console.log( this.clName+": "+methName+": subscribe Error:["+ - JSON.stringify(error)+']'); - this.procResult= JSON.stringify(error); - this.nService.error( "Getting Processing result", - " Error:["+JSON.stringify(error)+']', this.noptions); - }); - } -} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 54b9c1b..8959587 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -43,44 +43,31 @@ import {NotificationService} from './services/notification.service'; import {ParamShareService} from './services/paramShare.service'; import {TidyTableModule} from './modules/tidy-table/tidy-table.module'; import {UtilityService} from './services/utilityService/utility.service'; -import {ProcOnSrvSideSvc} from './services/procOnSrvSide.service'; - +import {VmFilteringPipe} from '../pipes/vm-filtering.pipe'; import {SimpleNotificationsModule} from 'angular2-notifications'; import { NgProgressModule } from 'ngx-progressbar'; import {FormsModule} from '@angular/forms'; -import { VmFilteringPipe } from './pipes/vm-filtering.pipe'; -import {APIService} from './services/cdt.apicall' - @NgModule({ imports: [ FormsModule, - CommonModule, HttpModule, RouterModule, TidyTableModule, - // HttpClient, HttpHeaders, - NgProgressModule, NgbModule, SimpleNotificationsModule.forRoot()], + CommonModule, HttpModule, RouterModule, TidyTableModule, NgProgressModule, NgbModule, SimpleNotificationsModule.forRoot()], declarations: [VmFilteringPipe, + HelpComponent, - HeaderComponent, NavigationComponent, LogoutComponent, Collapse, - Dropdown, DropdownNotClosableZone, DropdownOpen, DropDownToggleDirective + HeaderComponent, NavigationComponent, LogoutComponent, Collapse, Dropdown, DropdownNotClosableZone, DropdownOpen, DropDownToggleDirective ], - exports: [ - VmFilteringPipe, NgProgressModule, NgbModule, HelpComponent, - DropDownToggleDirective, HeaderComponent, NavigationComponent, - LogoutComponent, TidyTableModule, Collapse, Dropdown, - DropdownNotClosableZone, DropdownOpen - ] + exports: [VmFilteringPipe, NgProgressModule, NgbModule, HelpComponent, DropDownToggleDirective, HeaderComponent, NavigationComponent, LogoutComponent, TidyTableModule, Collapse, Dropdown, DropdownNotClosableZone, DropdownOpen] }) export class SharedModule { static forRoot(): ModuleWithProviders { return { ngModule: SharedModule, - providers: [ - HttpUtilService, EmitterService, NotificationService, - UtilityService,APIService, ProcOnSrvSideSvc, - ParamShareService, MappingEditorService - ] + providers: [HttpUtilService, EmitterService, NotificationService, + UtilityService, + ParamShareService, MappingEditorService] }; } -} +} \ No newline at end of file diff --git a/src/app/test/test.component.html b/src/app/test/test.component.html index 26165d9..8147f05 100644 --- a/src/app/test/test.component.html +++ b/src/app/test/test.component.html @@ -61,13 +61,6 @@ limitations under the License. -
-
- - -
-
-
@@ -126,9 +119,7 @@ limitations under the License.
- - +

@@ -140,15 +131,14 @@ limitations under the License.

-

- POLL TEST STATUS RESPONSE + POLL TEST STATUS RESPONSE
-
+
Poll test no {{pollCounter}}
diff --git a/src/app/test/test.component.ts b/src/app/test/test.component.ts index 347bde6..f3f6a94 100644 --- a/src/app/test/test.component.ts +++ b/src/app/test/test.component.ts @@ -25,7 +25,6 @@ import { NgxSpinnerService } from 'ngx-spinner'; import { saveAs } from 'file-saver'; import { Location } from '@angular/common'; import { ActivatedRoute, Router } from '@angular/router'; -import { NotificationService } from '.././shared/services/notification.service'; import { ParamShareService } from '.././shared/services/paramShare.service'; import { MappingEditorService } from '.././shared/services/mapping-editor.service'; import { NotificationsService } from 'angular2-notifications'; @@ -62,7 +61,7 @@ export class TestComponent implements OnInit { vnfcType: any; protocol: any; mode: any = 'NORMAL'; - public force = 'TRUE'; + force: any = 'True'; ttl: any; public formattedNameValuePairs = {}; public requestId = ''; @@ -88,11 +87,10 @@ export class TestComponent implements OnInit { public apiRequest = ''; public apiResponse = ''; public statusResponse; - public appcTimestampResponse; public outputTimeStamp; public status; public statusReason; - public errorResponse; + public errorResponse; public timer; public subscribe; public enableTestButton: boolean = false; @@ -103,39 +101,30 @@ export class TestComponent implements OnInit { public enableCounterDiv: boolean = false; public enableDownload: boolean = false; private userId = localStorage['userId']; - timeStampInt: number; - AppcTimeStampInt: number; - AppcTimeDiff: number; - isAppcTimestampReceived: boolean = false; - - constructor (private location: Location, private activeRoutes: ActivatedRoute, private notificationService: NotificationService, private nService: NotificationsService, private router: Router, private paramShareService: ParamShareService, private mappingEditorService: MappingEditorService, private httpUtil: HttpUtilService, - private utiltiy: UtilityService, private ngProgress: NgProgress, private spinner: NgxSpinnerService) { + constructor ( + private location: Location, + private activeRoutes: ActivatedRoute, + private nService: NotificationsService, + private router: Router, + private paramShareService: ParamShareService, + private mappingEditorService: MappingEditorService, + private httpUtil: HttpUtilService, + private utiltiy: UtilityService, + private ngProgress: NgProgress, + private spinner: NgxSpinnerService + ) { } ngOnInit() { - let timeStampI = new Date(); - console.log("ngOnInit: local timeStamp:[" + timeStampI + "]"); - let timeStampS = timeStampI.toISOString(); - console.log("ngOnInit: local ISO timestamp:[" + timeStampS + "]"); - //.. send HTTP request to APPC - this.getAppcTimestamp(); - } - /*public download() { - let stringData: any; - stringData = JSON.stringify(this.paramShareService.getSessionParamData()); - let paramsKeyValueFromEditor: JSON; - paramsKeyValueFromEditor = JSON.parse(stringData); - let fileName = 'param_' + this.action + '_' + this.type + '_' + "0.0.1" + 'V'; - this.JSONToCSVConvertor([paramsKeyValueFromEditor], fileName, true); + } - }*/ public download() { if (this.apiRequest) { - var fileName = 'test_' + this.action + '_' + this.actionIdentifiers['vnf-id'] + '_request.json'; + var fileName = 'test_' + this.action + '_' + this.actionIdentifiers['vnf-id'] + '_request'; var theJSON = this.apiRequest; if (fileName != null || fileName != '') { var blob = new Blob([theJSON], { @@ -149,7 +138,7 @@ export class TestComponent implements OnInit { } if (this.apiResponse) { - var fileName = 'test_' + this.action + '_' + this.actionIdentifiers['vnf-id'] + '_response.json'; + var fileName = 'test_' + this.action + '_' + this.actionIdentifiers['vnf-id'] + '_response'; var theJSON = this.apiResponse; if (fileName != null || fileName != '') { var blob = new Blob([theJSON], { @@ -168,7 +157,6 @@ export class TestComponent implements OnInit { this.enableTestButton = true; this.enablePollButton = true; if (this.subscribe && this.subscribe != undefined) this.subscribe.unsubscribe(); - this.apiResponse="Test has been abandoned and polling stopped"; this.nService.info("Information", "Test has been abandoned and polling stopped"); } @@ -302,7 +290,7 @@ export class TestComponent implements OnInit { constructTestPayload(listName2, listName3, key, value) { - if ((listName2 == undefined || listName2 == '') && (listName3 == undefined || listName3 == '')) { + if (listName2 == undefined && listName3 == undefined) { this.subPayload[key] = value; } if (listName2) { @@ -317,7 +305,7 @@ export class TestComponent implements OnInit { } else { this.vnfcJson[key] = value; - this.vmJson['vnfc'] = [this.vnfcJson]; + this.vmJson['vnfc'] = this.vnfcJson; this.flag = 1; } if (this.vmJson) this.lastvmJson = this.vmJson; @@ -329,22 +317,7 @@ export class TestComponent implements OnInit { } constructRequest() { - this.timeStampInt = Date.now(); //.. milliseconds - let timeStamp; - console.log("constructRequest: isAppcTimestampReceived:" + - (this.isAppcTimestampReceived ? "true" : "false")); - if (this.isAppcTimestampReceived) { - console.log("constructRequest: AppcTimeDiff:[" + this.AppcTimeDiff + "]"); - this.timeStampInt += this.AppcTimeDiff; - timeStamp = new Date(this.timeStampInt).toISOString(); - console.log("constructRequest: got timeStamp from APPC:[" + timeStamp + "]"); - } - else { //.. still not received - console.log('constructRequest: Appc Timestamp is not ready (use local)'); - this.timeStampInt -= 100000; - timeStamp = new Date(this.timeStampInt).toISOString(); - }; - console.log('constructRequest: timeStamp:[' + timeStamp + ']'); + let timeStamp = new Date().toISOString(); let reqId; this.requestId = reqId = new Date().getTime().toString(); let data = { @@ -357,7 +330,7 @@ export class TestComponent implements OnInit { 'sub-request-id': this.requestId, 'flags': { 'mode': 'NORMAL', - 'force': this.force.toString().toUpperCase(), + 'force': 'TRUE', 'ttl': 3600 } }, @@ -366,15 +339,6 @@ export class TestComponent implements OnInit { 'payload': JSON.stringify(this.payload) } }; - if (this.action == 'Unlock') { - let payload = JSON.parse(data.input['payload']); - data.input['common-header']['request-id'] = payload['request-id']; - data.input['common-header']['sub-request-id'] = payload['request-id']; - } - - if(this.action == 'Unlock' || this.action == 'Lock' || this.action == 'CheckLock') { - delete data.input['payload']; - } return data; } @@ -384,20 +348,13 @@ export class TestComponent implements OnInit { this.enableTestButton = false; this.enablePollButton = false; this.timer = Observable.interval(10000); - if(this.action == 'Unlock' || this.action == 'Lock' || this.action == 'CheckLock') { - this.enablePollButton = true; - this.enableBrowse = true; - this.enableTestButton = true; - this.requestId = ''; - } else { - this.subscribe = this.timer.subscribe((t) => this.pollTestStatus()); - } + this.subscribe = this.timer.subscribe((t) => this.pollTestStatus()); this.ngProgress.start(); this.apiRequest = JSON.stringify(this.constructRequest()); this.httpUtil.post( { - url: environment.testVnf + "?urlAction=" + this.getUrlEndPoint(this.action), + url: environment.testVnf + "?urlAction=" + this.getUrlEndPoint(this.action.toLowerCase()), data: this.apiRequest }) .subscribe(resp => { @@ -408,11 +365,10 @@ export class TestComponent implements OnInit { }, error => { this.nService.error('Error', 'Error in connecting to APPC Server'); - // this.enableBrowse = true; + this.enableBrowse = true; this.enableTestButton = true; this.enablePollButton = true; this.enableCounterDiv = false; - this.enableBrowse = true; if (this.subscribe && this.subscribe != undefined) this.subscribe.unsubscribe(); }); @@ -422,98 +378,10 @@ export class TestComponent implements OnInit { }, 3500); } - getAppcTimestamp() { - this.timeStampInt = Date.now(); //.. milliseconds - console.log("getAppcTimestamp: timeStampInt:[" + this.timeStampInt + "]"); - let timeStampP = new Date(this.timeStampInt).toISOString(); - console.log("getAppcTimestamp: from int timestamp:[" + timeStampP + "]"); - this.isAppcTimestampReceived = false; - let reqId = new Date().getTime().toString(); - try { - let data = { - 'input': { - 'design-request': { - 'request-id': reqId, - 'action': 'getAppcTimestampUTC', - 'payload': '{}' - } - } - }; - console.log('getAppcTimestamp: sending httpUtil.post...'); - this.httpUtil.post( - { - url: environment.getDesigns, data: data - }) - .subscribe(resp => { - this.appcTimestampResponse = resp; - // this.appcTimestampResponse = JSON.stringify(resp); - console.log('appcTimestampResponse:[' + resp + ']'); - this.parseAppcTimestamp(this.appcTimestampResponse); - }); - } - catch (e) { - this.nService.warn('status', - 'Error while retrieving APPC Timestamp(using local by default)!'); - } - } - - parseAppcTimestamp(tstampStr: string) { - //.. parse the response to get timestamp as milliseconds - // input format: YYYY-MM-DDTHH:mm:ss.sssZ (24 chars) - var rexp = - new RegExp(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.(\d{3})Z/); - var mresult = rexp.exec(tstampStr); - if (mresult[0]) { - console.log("parseAppcTimestamp: response format is OK..."); - var aYearS = mresult[1]; - var aYear = parseInt(aYearS, 10); - var aMonS = mresult[2]; - var aMon = parseInt(aMonS, 10) - 1; - var aDayS = mresult[3]; - var aDay = parseInt(aDayS, 10); - var aHrS = mresult[4]; - var aHr = parseInt(aHrS, 10); - var aMntS = mresult[5]; - var aMnt = parseInt(aMntS, 10); - var aSecS = mresult[6]; - var aSec = parseInt(aSecS, 10); - var aMsecS = mresult[7]; - var aMsec = parseInt(aMsecS, 10); - this.AppcTimeStampInt = - Date.UTC(aYear, aMon, aDay, aHr, aMnt, aSec, aMsec); - console.log( - "parseAppcTimestamp: AppcTimeStampInt:[" + this.AppcTimeStampInt + "]"); - let timeStampP = new Date(this.AppcTimeStampInt).toISOString(); - console.log("parseAppcTimestamp: from int timestamp:[" + timeStampP + "]"); - //.. AppcTimeDiff - time difference in milliseconds - this.AppcTimeDiff = this.AppcTimeStampInt - this.timeStampInt; - console.log("parseAppcTimestamp: AppcTimeDiff:[" + this.AppcTimeDiff + "]"); - this.isAppcTimestampReceived = true; - } - else { - throw new Error( - 'The received APPC Timestamp is not matching expected format: YYYY-MM-DDTHH:mm:ss.sssZ !'); - } - } pollTestStatus() { if (this.requestId && this.actionIdentifiers['vnf-id']) { - // console.log("payload==" + JSON.stringify(this.payload)) - this.timeStampInt = Date.now(); //.. milliseconds - let timeStamp; - console.log("pollTestStatus: isAppcTimestampReceived:" + - (this.isAppcTimestampReceived ? "true" : "false")); - if (this.isAppcTimestampReceived) { - this.timeStampInt += this.AppcTimeDiff; - timeStamp = new Date(this.timeStampInt).toISOString(); - console.log("pollTestStatus: got timeStamp from APPC:[" + timeStamp + "]"); - } - else { //.. still not received - console.log('pollTestStatus: Appc Timestamp is not ready (use local)'); - this.timeStampInt -= 100000; - timeStamp = new Date(this.timeStampInt).toISOString(); - }; - console.log("pollTestStatus: timestamp:[" + timeStamp + "]"); + let timeStamp = new Date().toISOString(); let reqId = new Date().getTime().toString(); let data = { 'input': { @@ -525,7 +393,7 @@ export class TestComponent implements OnInit { 'sub-request-id': reqId, 'flags': { 'mode': 'NORMAL', - 'force': this.force.toString().toUpperCase(), + 'force': 'TRUE', 'ttl': 3600 } }, @@ -567,14 +435,10 @@ export class TestComponent implements OnInit { if (status.toUpperCase() === 'SUCCESS' || status.toUpperCase() === 'SUCCESSFUL') { if (this.subscribe && this.subscribe != undefined) this.subscribe.unsubscribe(); this.enablePollButton = true; - this.enableBrowse = true; - this.enableTestButton = true; } if (status.toUpperCase() === 'FAILED') { if (this.subscribe && this.subscribe != undefined) this.subscribe.unsubscribe(); this.enablePollButton = true; - this.enableBrowse = true; - this.enableTestButton = true; } } else { @@ -592,14 +456,11 @@ export class TestComponent implements OnInit { this.showStatusResponseDiv = false; this.errorResponse = 'Error Connecting to APPC server'; this.enableCounterDiv = false; - this.enableBrowse = true; - this.enableTestButton = true; if (this.subscribe && this.subscribe != undefined) { this.subscribe.unsubscribe(); this.enablePollButton = true; } }); - } else { this.nService.error("Error", "Please enter vnf Id & request Id"); @@ -608,16 +469,43 @@ export class TestComponent implements OnInit { } getUrlEndPoint(action) { - let charArray = action.split(''); - let url = ''; - for (let i = 0; i < charArray.length; i++) { - if (charArray[i] == charArray[i].toUpperCase() && i != 0) { - url = url + '-'; - } - url = url + charArray[i]; + switch (action) { + case 'configmodify': + return 'config-modify'; + case 'configbackup': + return 'config-backup'; + case 'configrestore': + return 'config-restore'; + case 'healthcheck': + return 'health-check'; + case 'quiescetraffic': + return 'quiesce-traffic'; + case 'resumetraffic': + return 'resume-traffic'; + case 'distributetraffic': + return 'distribute-traffic'; + case 'startapplication': + return 'start-application'; + case 'stopapplication': + return 'stop-application'; + case 'upgradebackout': + return 'upgrade-backout'; + case 'upgradepostcheck': + return 'upgrade-post-check'; + case 'upgradeprecheck': + return 'upgrade-pre-check'; + case 'upgradesoftware': + return 'upgrade-software'; + case 'upgradebackup': + return 'upgrade-backup'; + case 'attachvolume': + return 'attach-volume'; + case 'detachvolume': + return 'detach-volume'; + default: + return action.toLowerCase(); } - return url.toLowerCase(); } setValuesOnFileUploadFailure() { diff --git a/src/app/vnfs/LoginGuardService/Login-guard-service.ts b/src/app/vnfs/LoginGuardService/Login-guard-service.ts index 1e7e752..ddec7b5 100644 --- a/src/app/vnfs/LoginGuardService/Login-guard-service.ts +++ b/src/app/vnfs/LoginGuardService/Login-guard-service.ts @@ -24,13 +24,11 @@ limitations under the License. import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot} from '@angular/router'; import {Injectable} from '@angular/core'; -import {MappingEditorService} from '../../shared/services/mapping-editor.service'; -import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; @Injectable() export class LoginGuardService implements CanActivate { - constructor(private ngbModal: NgbModal, private mapService: MappingEditorService, private router: Router) { + constructor(private router: Router) { } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { @@ -44,4 +42,4 @@ export class LoginGuardService implements CanActivate { } } -} \ No newline at end of file +} diff --git a/src/app/vnfs/auth-guard-modal/auth-guard-modal.ts b/src/app/vnfs/auth-guard-modal/auth-guard-modal.ts index 31c748b..ec03978 100644 --- a/src/app/vnfs/auth-guard-modal/auth-guard-modal.ts +++ b/src/app/vnfs/auth-guard-modal/auth-guard-modal.ts @@ -23,7 +23,6 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ import {Component, OnInit} from '@angular/core'; -import {NgbActiveModal} from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'app-auth-guard-modal', @@ -32,7 +31,7 @@ import {NgbActiveModal} from '@ng-bootstrap/ng-bootstrap'; }) export class AuthGuardModalComponent implements OnInit { - constructor(public activeModal: NgbActiveModal) { + constructor() { } ngOnInit() { diff --git a/src/app/vnfs/build-artifacts/build-artifacts.component.html b/src/app/vnfs/build-artifacts/build-artifacts.component.html index fad94cb..33d8064 100644 --- a/src/app/vnfs/build-artifacts/build-artifacts.component.html +++ b/src/app/vnfs/build-artifacts/build-artifacts.component.html @@ -23,11 +23,9 @@ limitations under the License.
-
- - +
- +
@@ -143,7 +142,7 @@ limitations under the License. diff --git a/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.ts b/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.ts index 6ba8e52..f7d1837 100644 --- a/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.ts +++ b/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.ts @@ -38,7 +38,6 @@ import 'rxjs/add/operator/map'; import { NgProgress } from 'ngx-progressbar'; import { NgxSpinnerService } from 'ngx-spinner'; import { appConstants } from '../../../../constants/app-constants'; -import { APIService } from "../../../shared/services/cdt.apicall"; let YAML = require('yamljs'); @@ -51,11 +50,9 @@ declare var $: any; providers: [ParameterDefinitionService] }) export class ParameterComponent implements OnInit { - clName= "ParameterCompon"; public paramForm: any; public actionType: any; public showFilterFields: boolean; - public filterByFieldvalues = appConstants.filterByFieldvalues; public ruleTypeConfiguaration = appConstants.ruleTypeConfiguaration; public requiredValues: boolean[] = appConstants.requiredValues; @@ -109,12 +106,11 @@ export class ParameterComponent implements OnInit { public artifactName; public appDataObject: any; public downloadDataObject: any; - public artifact_fileName=""; + public artifact_fileName = ""; template_id: any; private selectedActionReference: any; constructor(private httpService: HttpUtilService, - private apiService:APIService, private parameterDefinitionService: ParameterDefinitionService, private paramShareService: ParamShareService, private mappingEditorService: MappingEditorService, @@ -126,26 +122,33 @@ export class ParameterComponent implements OnInit { } ngOnInit() { - var methName= "ngOnInit"; - this.selectedActionReference = this.mappingEditorService.newObject; + this.selectedActionReference = this.parameterDefinitionService.prepareFileName(); if (this.selectedActionReference && this.selectedActionReference != undefined) { - this.vnfType = this.selectedActionReference.vnf; - this.protocol = this.selectedActionReference.protocol; - this.action = this.selectedActionReference.action; - if( this.utilService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": vnfType:["+this.vnfType+ - "] action:["+this.action+"] protocol:["+this.protocol+"]"); - if(this.selectedActionReference.vnfc) { - this.vnfcType = this.selectedActionReference.vnfc; - if( this.utilService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": have vnfcType:["+ - this.vnfcType+"]"); - } - if( this.action === 'ConfigScaleOut'){ - // this.template_id = this.selectedActionReference.templateId; - this.template_id = this.mappingEditorService.identifier; + + this.vnfType = this.selectedActionReference.scope['vnf-type']; + this.vnfcType = this.selectedActionReference.scope['vnfc-type']; + this.protocol = this.selectedActionReference['device-protocol']; + this.action = this.selectedActionReference.action; + + for (let i = 0; i < this.selectedActionReference['artifact-list'].length; i++) { + let artifactList = this.selectedActionReference['artifact-list']; + if (artifactList[i]['artifact-type'] === 'parameter_definitions') { + var artifactName = artifactList[i]['artifact-name']; + var artifactNameWithoutExtension = ''; + if (artifactName) { + artifactNameWithoutExtension = artifactName.substring(0, artifactName.lastIndexOf(".")); + } + if (this.mappingEditorService.identifier) { + if (artifactNameWithoutExtension.endsWith(this.mappingEditorService.identifier)) { + this.artifact_fileName = artifactName; + } + + } + else { + this.artifact_fileName = artifactName; + } + } } - this.artifact_fileName = this.selectedActionReference.pd_artifact; this.parameterDefinitionService.setValues(this.vnfType, this.vnfcType, this.protocol, this.action, this.artifact_fileName); } else { @@ -162,26 +165,22 @@ export class ParameterComponent implements OnInit { 'scopeType': '' }; } - //let path = this.location.path - /* this.activeRoutes.url.subscribe(UrlSegment => { - this.actionType = UrlSegment[0].path - }) - */ + + this.template_id = this.mappingEditorService.identifier; } ngAfterViewInit() { - if( this.mappingEditorService.latestAction) { + if (this.mappingEditorService.latestAction) { this.displayParamObjects = []; this.modelParamDefinitionObjects = []; - this.displayParamObjects= this.paramShareService.getSessionParamData(); - // if( this.paramShareService.getSessionParamData() != undefined && - // this.paramShareService.getSessionParamData().length > 0) - if( this.displayParamObjects != undefined && - this.displayParamObjects.length > 0 ) - { - this.parameterDefinitionService.populateDataUponSource( this.displayParamObjects); + if (this.paramShareService.getSessionParamData() != undefined && this.paramShareService.getSessionParamData().length > 0) { + this.getPDFromSession(); } else { - this.getPD(); + this.ngProgress.start(); + this.getPD(); + setTimeout(() => { + this.ngProgress.done(); + }, 3500); } } else { this.nService.error(appConstants.errors.error, appConstants.errors["noAction&VNFTypeInRDscreenError"]); @@ -192,20 +191,19 @@ export class ParameterComponent implements OnInit { public getPD() { let result: any; - let input= - this.utilService.createPayloadForRetrieve( false, this.action, this.vnfType,this.artifact_fileName); + let input=this.utilService.createPayloadForRetrieve(false, this.action, this.vnfType,this.artifact_fileName); let artifactContent: any; - this.ngProgress.start(); - return this.apiService.callGetArtifactsApi(input).subscribe( data => { - if( this.utilService.checkResult(data)) { - let result: any = JSON.parse(data.output.data.block).artifactInfo[0]; + return this.httpService.post({ + url: environment.getDesigns, + data: input + }).subscribe(data => { + if (this.utilService.checkResult(data)) { + let result: any = JSON.parse(data.output.data.block).artifactInfo[0]; var pdObject = YAML.parse(result['artifact-content']); let fileModel = pdObject['vnf-parameter-list']; this.displayParamObjects = this.parameterDefinitionService.populatePD(fileModel); } - else { - } - this.ngProgress.done(); + }, error => this.nService.error(appConstants.errors.error, appConstants.errors.connectionError)); @@ -214,19 +212,20 @@ export class ParameterComponent implements OnInit { public getPDFromSession() { - this.ngProgress.start(); + this.ngProgress.start(); return this.httpService.get({ url: 'testurl', - }).subscribe( data => { - this.displayParamObjects = this.paramShareService.getSessionParamData(); - this.ngProgress.done(); + }).subscribe(data => { + this.displayParamObjects = this.paramShareService.getSessionParamData(); + this.ngProgress.done(); }, - error => { - this.displayParamObjects = this.paramShareService.getSessionParamData(); - this.ngProgress.done(); - }); + error => { + this.displayParamObjects = this.paramShareService.getSessionParamData(); + this.ngProgress.done(); + }); } + //========================== End of NGInit() Method============================================ selectedNavItem(item: any) { this.item = item; } @@ -267,10 +266,6 @@ export class ParameterComponent implements OnInit { // Create the file reader let reader = new FileReader(); this.readFile(input.files[0], reader, (result) => { - if ('keyfile' === uploadType) { - this.myKeyFileName = input.files[0].name; - this.displayParamObjects = this.parameterDefinitionService.processKeyFile(this.myKeyFileName, result); - } if ('pdfile' === uploadType) { this.myPdFileName = input.files[0].name; this.displayParamObjects = this.parameterDefinitionService.processPDfile(this.myPdFileName, result); @@ -299,7 +294,8 @@ export class ParameterComponent implements OnInit { let obj: any = fileInput.target.files; } - sourceChanged( data, obj) { + + sourceChanged(data, obj) { if (data == 'A&AI') { obj.ruleTypeValues = appConstants.ruleTypeValues; for (let x = 0; x < 5; x++) { @@ -321,7 +317,7 @@ export class ParameterComponent implements OnInit { } //========================== End of sourceChanged() Method============================================ - ruleTypeChanged( data, obj) { + ruleTypeChanged(data, obj) { if (data == null || data == undefined || data == 'null') { obj.showFilterFields = false; obj['rule-type'] = null; @@ -344,7 +340,7 @@ export class ParameterComponent implements OnInit { } for (let x = 0; x < sourceObject.length; x++) { obj['response-keys'][x]['key-name'] = sourceObject[x]['key-name']; - obj['response-keys'][x]['key-value'] = sourceObject[x]['key-value']; + obj['response-keys'][x]['key-value'] = sourceObject[x]['key-value']; } } diff --git a/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.css b/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.css index a795f2a..1b4c470 100644 --- a/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.css +++ b/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.css @@ -134,7 +134,4 @@ td { .file { visibility: hidden; position: absolute; -} - -.col-md-1point5 {width: 12%} -.col-md-2point5 {width: 21%;} +} \ No newline at end of file diff --git a/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.html b/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.html index 65847e1..564cd32 100644 --- a/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.html +++ b/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.html @@ -44,19 +44,18 @@ limitations under the License. Required Field
-
- +
+ - Add New VNFC Type
- -
+
@@ -73,19 +72,16 @@ limitations under the License. - +
Assign New Template Identifier + (click)="showIdentifier()">Assign New Template Identifier
- -
-
@@ -141,7 +137,6 @@ limitations under the License.
-
VNFC Information @@ -155,15 +150,15 @@ limitations under the License.
- +
-
- +
+
- +
-
+
@@ -203,29 +198,29 @@ limitations under the License.
-
-
+
+
VM Number: {{j+1}}
-
+
- + Required Field
-
- +
+ Required Field
- + - {{errorMessage}} + {{errorMessage}}
@@ -333,20 +328,45 @@ limitations under the License. - - - - - - -
- -
-
- -
- - + + + + + + diff --git a/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.ts b/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.ts index 0a3c090..17a23e2 100644 --- a/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.ts +++ b/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.component.ts @@ -3,7 +3,8 @@ =================================================================== Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. =================================================================== - +Copyright (C) 2018 IBM. +=================================================================== Unless otherwise specified, all software contained herein is licensed under the Apache License, Version 2.0 (the License); you may not use this software except in compliance with the License. @@ -16,21 +17,18 @@ 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. - -ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ import * as XLSX from 'xlsx'; import * as _ from 'underscore'; - import { ActivatedRoute, Router } from '@angular/router'; import { Component, OnInit, ViewChild } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; import { BuildDesignComponent } from '../build-artifacts.component'; import { HttpUtilService } from '../../../shared/services/httpUtil/http-util.service'; import { Location } from '@angular/common'; import { MappingEditorService } from '../../..//shared/services/mapping-editor.service'; +import { ModalComponent } from '../../../shared/modal/modal.component'; import { NgProgress } from 'ngx-progressbar'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NotificationService } from '../../../shared/services/notification.service'; @@ -38,18 +36,16 @@ import { NotificationsService } from 'angular2-notifications'; import { ParamShareService } from '../../..//shared/services/paramShare.service'; import { environment } from '../../../../environments/environment'; import { saveAs } from 'file-saver'; -import { Jsonp } from '@angular/http'; import { ReferenceDataFormUtil } from './reference-dataform.util'; import { UtilityService } from '../../../shared/services/utilityService/utility.service'; -import { APIService } from "../../../shared/services/cdt.apicall"; - +import { appConstants } from '../../../../constants/app-constants'; // Common Confirm Modal import { DialogService } from 'ng2-bootstrap-modal'; import { ConfirmComponent } from "../../../shared/confirmModal/confirm.component"; - declare var $: any; type AOA = Array>; +const REFERENCE_DATA: string = "reference_data"; @Component({ selector: 'reference-dataform', @@ -58,7 +54,8 @@ type AOA = Array>; providers: [ReferenceDataFormUtil] }) export class ReferenceDataformComponent implements OnInit { - public classNm= "ReferenceDataformComp"; + public classNm = "ReferenceDataformCompon"; + @ViewChild(ModalComponent) modalComponent: ModalComponent; public showUploadStatus: boolean = false; public fileUploaded: boolean = false; public uploadedData: any; @@ -89,8 +86,8 @@ export class ReferenceDataformComponent implements OnInit { errorMessage = ''; invalid = true; fileName: any; - vnfcIdentifier; - oldVnfcIdentifier: any + vnfcIdentifier = ''; + oldVnfcIdentifier: any; public uploadFileName: any; public addVmClickedFlag: boolean = false; public getExcelUploadStatus: boolean = false; @@ -110,13 +107,13 @@ export class ReferenceDataformComponent implements OnInit { identifierDrpValues: any = []; //settings for the notifications. options = { - timeOut: 4500, + timeOut: 1000, showProgressBar: true, pauseOnHover: true, clickToClose: true, maxLength: 200 }; - //initializing this object to contain all the parameters to be captured later + //initializing this object to contain all the parameters to be captured public referenceDataObject = { action: '', 'action-level': 'vnf', @@ -129,12 +126,31 @@ export class ReferenceDataformComponent implements OnInit { 'artifact-list': [] }; public refernceScopeObj = { sourceType: '', from: '', to: '' }; - public actions = ['', 'Configure', 'ConfigModify', 'ConfigBackup', 'ConfigRestore', 'GetRunningConfig', 'HealthCheck', 'StartApplication', 'StopApplication', 'QuiesceTraffic', 'ResumeTraffic', 'UpgradeBackout', 'UpgradeBackup', 'UpgradePostCheck', 'UpgradePreCheck', 'UpgradeSoftware', 'OpenStack Actions', 'ConfigScaleOut']; - public groupAnotationValue = ['', 'Pair']; - public groupAnotationType = ['', 'first-vnfc-name', 'fixed-value', 'relative-value']; - public deviceProtocols = ['', 'ANSIBLE', 'CHEF', 'NETCONF-XML', 'REST', 'CLI', 'RESTCONF']; - public deviceTemplates = ['', 'Y', 'N']; - public sourceTypeColl = ['', 'vnfType', 'vnfcType']; + public actions = [appConstants.Actions.blank, + appConstants.Actions.configure, + appConstants.Actions.ConfigModify, + appConstants.Actions.configBackup, + appConstants.Actions.configRestore, + appConstants.Actions.getRunningConfig, + appConstants.Actions.healthCheck, + appConstants.Actions.startApplication, + appConstants.Actions.stopApplication, + appConstants.Actions.quiesceTraffic, + appConstants.Actions.resumeTraffic, + appConstants.Actions.distributeTraffic, + appConstants.Actions.upgradeBackout, + appConstants.Actions.upgradeBackup, + appConstants.Actions.upgradePostCheck, + appConstants.Actions.upgradePreCheck, + appConstants.Actions.upgradeSoftware, + appConstants.Actions.openStackActions, + appConstants.Actions.configScaleOut + ]; + public groupAnotationValue = [appConstants.groupAnotationValue.blank, appConstants.groupAnotationValue.pair]; + public groupAnotationType = [appConstants.groupAnotationType.blank, appConstants.groupAnotationType.firstVnfcName, appConstants.groupAnotationType.fixedValue, appConstants.groupAnotationType.relativeValue]; + public deviceProtocols = [appConstants.DeviceProtocols.blank, appConstants.DeviceProtocols.ansible, appConstants.DeviceProtocols.chef, appConstants.DeviceProtocols.netconfXML, appConstants.DeviceProtocols.rest, appConstants.DeviceProtocols.cli, appConstants.DeviceProtocols.restConf]; + public deviceTemplates = [appConstants.deviceTemplates.blank, appConstants.deviceTemplates.y, appConstants.deviceTemplates.n]; + public sourceTypeColl = [appConstants.sourceTypeColl.blank, appConstants.sourceTypeColl.vnfType, appConstants.sourceTypeColl.vnfcType]; public ipAddressBoolean = ['', 'Y', 'N']; public Sample: any = { 'vnfc-instance': '1', @@ -170,64 +186,49 @@ export class ReferenceDataformComponent implements OnInit { public firstArrayElement = []; public remUploadedDataArray = []; isConfigScaleOut = false - isConfigOrConfigModify = false - configScaleOutExist: boolean + isConfigureAction = false; + configScaleOutExist: boolean = true; displayVnfc = 'false'; isVnfcType: boolean; isVnfcTypeList: boolean = true; - public referencDataTab = [ - { - - name: 'Reference Data', - url: 'references', - }]; - public allTabs = [ - { - name: 'Reference Data', - url: 'references', - }, { - name: 'Template', - url: 'templates/myTemplates', - }, { - name: 'Parameter Definition', - url: 'parameterDefinitions/create' - }/*, { - name: "Test", - url: 'test', - }*/ - ]; - public actionList = require('../../../../cdt.application.properties.json').Actions; - - public versionNoForApiCall = require('../../../../cdt.application.properties.json').versionNoForApiCall; + public actionList = { + "ConfigScaleOut": "ConfigScaleOut", + "Configure": "Configure" + }; + public versionNoForApiCall = "0.0.1"; private displayVMBlock: boolean = true; - constructor( - private buildDesignComponent: BuildDesignComponent, private apiService: APIService, private utilityService: UtilityService, private httpUtils: HttpUtilService, private referenceDataFormUtil: ReferenceDataFormUtil, private route: Router, private location: Location, private activeRoutes: ActivatedRoute, private notificationService: NotificationService, - private paramShareService: ParamShareService, private mappingEditorService: MappingEditorService, private modalService: NgbModal, private nService: NotificationsService, private ngProgress: NgProgress, - private dialogService: DialogService) - { - console.log(this.classNm+ - ": new: start: tracelvl="+this.utilityService.getTracelvl() ); + constructor ( + private buildDesignComponent: BuildDesignComponent, + private httpUtils: HttpUtilService, + private route: Router, + private location: Location, + private activeRoutes: ActivatedRoute, + private notificationService: NotificationService, + private paramShareService: ParamShareService, + private mappingEditorService: MappingEditorService, + private modalService: NgbModal, + private nService: NotificationsService, + private ngProgress: NgProgress, + private utilityService: UtilityService, + private dialogService: DialogService, + private referenceDataFormUtil: ReferenceDataFormUtil) { + console.log(this.classNm + ": new: start."); } ngOnInit() { - let methName= "ngOnInit"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": ngOnInit: start "); - // this.handleVMBlockDisplay(); - - //initializing the variables and checking for configscaleout fromm properties file - this.configScaleOutExist = require('../../../../cdt.application.properties.json').displayConfigScaleout; + let methName = "ngOnInit"; + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": " + methName + ": start."); this.displayVnfc = sessionStorage.getItem("vnfcSelectionFlag"); if (this.configScaleOutExist) { - this.actions = ['', 'Configure', 'ConfigModify', 'ConfigBackup', 'ConfigRestore', 'GetRunningConfig', 'HealthCheck', 'StartApplication', 'StopApplication', 'QuiesceTraffic', 'ResumeTraffic', 'UpgradeBackout', 'UpgradeBackup', 'UpgradePostCheck', 'UpgradePreCheck', 'UpgradeSoftware', 'OpenStack Actions', 'ConfigScaleOut']; + this.actions = ['', 'Configure', 'ConfigModify', 'ConfigBackup', 'ConfigRestore', 'GetRunningConfig', 'HealthCheck', 'StartApplication', 'StopApplication', 'QuiesceTraffic', 'ResumeTraffic', 'DistributeTraffic', 'UpgradeBackout', 'UpgradeBackup', 'UpgradePostCheck', 'UpgradePreCheck', 'UpgradeSoftware', 'OpenStack Actions', 'ConfigScaleOut']; } else { - this.actions = ['', 'Configure', 'ConfigModify', 'ConfigBackup', 'ConfigRestore', 'GetRunningConfig', 'HealthCheck', 'StartApplication', 'StopApplication', 'QuiesceTraffic', 'ResumeTraffic', 'UpgradeBackout', 'UpgradeBackup', 'UpgradePostCheck', 'UpgradePreCheck', 'UpgradeSoftware', 'OpenStack Actions']; + this.actions = ['', 'Configure', 'ConfigModify', 'ConfigBackup', 'ConfigRestore', 'GetRunningConfig', 'HealthCheck', 'StartApplication', 'StopApplication', 'QuiesceTraffic', 'ResumeTraffic', 'DistributeTraffic', 'UpgradeBackout', 'UpgradeBackup', 'UpgradePostCheck', 'UpgradePreCheck', 'UpgradeSoftware', 'OpenStack Actions']; } this.self = this; let path = this.location.path; this.title = 'Reference Data'; - // setting the structure for the reference data object this.referenceDataObject = { action: '', 'action-level': 'vnf', @@ -239,57 +240,40 @@ export class ReferenceDataformComponent implements OnInit { 'port-number': '', 'artifact-list': [] }; - //getting the data from session data, calling get Artifact if the data is undefined this.updateParams = sessionStorage.getItem('updateParams'); - //getting the data from the referencenameobjects if the nav is changed and assiging it to the cace data let cacheData = this.mappingEditorService.referenceNameObjects; - - if (this.utilityService.checkNotNull(cacheData)) { - //if cache data exists then assiging the data to the latest temp all data object. - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": ngOnInit: have cacheData."); + if (cacheData != undefined && cacheData != null && cacheData.length > 0) { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": ngOnInit: have cacheData."); this.tempAllData = cacheData; - //calling the highligted method to highlight the selected actions in the action dropdown - this.highlightSelectedActions(this.tempAllData) - // getting the latest action that the user has selected and assiging it to the reference data object once the user toggles between tabs from reference if (this.mappingEditorService.latestAction != undefined) { - //adding the latest action to the screen this.referenceDataObject = this.mappingEditorService.latestAction; this.toggleIdentifier(this.referenceDataObject.action); - //this.referenceDataObject['template-id-list'] = this.mappingEditorService.identifier - //use these commented objects to be used in template and pd pages - //this.templateIdentifier = this.mappingEditorService.identifier - //adding the scope from referencedata obj to referencescopeobject this.refernceScopeObj.sourceType = this.referenceDataObject['scopeType']; - //assigning the latest action fetched to the old action from reference data object this.oldAction = this.referenceDataObject.action; - //this method is called with the action reterived and subsequent values are assigned to refdataobj for displaying this.populateExistinAction(this.referenceDataObject.action); this.displayHideVnfc(); } } else if (this.updateParams != 'undefined') { - //calls the get artifact() to reterive the values if cache data is not present this.getArtifact(); } - //getting the appdata & downloadDataObject from mapping editor service and assiging it. var appData = this.mappingEditorService.appDataObject; if (appData != null || appData != undefined) this.appData = appData; var downloadData = this.mappingEditorService.downloadDataObject; if (downloadData != null || downloadData != undefined) this.downloadData = downloadData; - if (sessionStorage.getItem('vnfParams')) { this.vnfParams = JSON.parse(sessionStorage.getItem('vnfParams')); } if (this.vnfParams && this.vnfParams.vnfType) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": vnfParams.vnfType:["+ - this.vnfParams.vnfType+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": " + methName + ": vnfParams.vnfType:[" + + this.vnfParams.vnfType + "]"); this.referenceDataObject['scope']['vnf-type'] = this.vnfParams.vnfType; } if (this.vnfParams && this.vnfParams.vnfcType) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": vnfParams.vnfcType:["+ - this.vnfParams.vnfcType+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": " + methName + ": vnfParams.vnfcType:[" + + this.vnfParams.vnfcType + "]"); this.referenceDataObject['scope']['vnfc-type'] = this.vnfParams.vnfcType; } this.uploadedDataArray = []; @@ -297,34 +281,23 @@ export class ReferenceDataformComponent implements OnInit { this.firstArrayElement = []; this.uploadFileName = ''; this.templateIdentifier = this.mappingEditorService.identifier - // if (this.mappingEditorService.newObject) { - // this.vnfcIdentifier = this.mappingEditorService.newObject.vnfc; - // } - // else { - // this.vnfcIdentifier = ''; - // this.referenceDataObject['vnfcIdentifier'] = ''; - // } this.oldVnfcIdentifier = this.vnfcIdentifier; - if( this.utilityService.getTracelvl() > 1 ) - console.log( this.classNm+": "+methName+": displayVnfc:["+ - this.displayVnfc+"]"); - if( this.utilityService.getTracelvl() > 1 ) - console.log( this.classNm+": "+methName+": templateIdentifier:["+ - this.templateIdentifier+"]"); + if (this.utilityService.getTracelvl() > 1) + console.log(this.classNm + ": " + methName + ": displayVnfc:[" + + this.displayVnfc + "]"); + if (this.utilityService.getTracelvl() > 1) + console.log(this.classNm + ": " + methName + ": templateIdentifier:[" + + this.templateIdentifier + "]"); // Enable or Block Template and PD Tabs this.buildDesignComponent.getRefData( - { ...this.referenceDataObject, displayVnfc: this.displayVnfc }, - { reqField: this.templateIdentifier }); + { ...this.referenceDataObject, displayVnfc: this.displayVnfc }, + { reqField: this.templateIdentifier }); //.. configure some drop-downs - this.configDrp(this.referenceDataObject.action); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": tempAllData:["+ - JSON.stringify(this.tempAllData)+"]"); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": finish."); + this.configDrp(this.referenceDataObject.action) + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": " + methName + ": finish."); } - //setting the value to display or hide the template identifier dropdown in the screen toggleIdentifier(data) { if (data == 'ConfigScaleOut') { this.isConfigScaleOut = true @@ -336,42 +309,64 @@ export class ReferenceDataformComponent implements OnInit { //to retrive the data from appc and assign it to the vaiables, if no data display the message reterived from the API getArtifact() { - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": getArtifact: start..."); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": getArtifact: start."); try { - // setting the isVnfcTypeList & isVnfcType to false initially - this.isVnfcTypeList = false; - this.isVnfcType = false let data = this.utilityService.createPayloadForRetrieve(true, '', '', ''); this.ngProgress.start(); - let serviceCall = this.apiService.callGetArtifactsApi(data); - serviceCall.subscribe(resp => { - //getting the response and assigining it to the variables used and end the progress bar aftr the data is fetched. + this.httpUtils.post({ + url: environment.getDesigns, + data: data + }).subscribe(resp => { + if (this.utilityService.getTracelvl() > 1) + console.log(this.classNm + ": getArtifact: got response ..."); if (resp.output.data.block != undefined) { - this.nService.success('Status', 'data fetched '); + if (this.utilityService.getTracelvl() > 1) + console.log(this.classNm + + ": getArtifact: output.data.block not empty."); + this.nService.success(appConstants.notifications.titles.status, appConstants.messages.datafetched); let artifactInfo = JSON.parse(resp.output.data.block).artifactInfo[0]; - let referenceDataAll = JSON.parse(artifactInfo['artifact-content'])['reference_data']; let reference_data = JSON.parse(artifactInfo['artifact-content'])['reference_data'][0]; this.referenceDataObject = reference_data; this.toggleIdentifier(this.referenceDataObject.action); - if (this.referenceDataObject.action == 'ConfigScaleOut') { - this.groupAnotationType = ['', 'first-vnfc-name', 'fixed-value', 'relative-value', 'existing-group-name']; + if (this.referenceDataObject.action == appConstants.Actions.configScaleOut) { + this.groupAnotationType = [appConstants.groupAnotationType.blank, appConstants.groupAnotationType.firstVnfcName, appConstants.groupAnotationType.fixedValue, appConstants.groupAnotationType.relativeValue, appConstants.groupAnotationType.existingGroupName]; } - this.highlightSelectedActions(referenceDataAll) - //chck vnfc or vnfcTypeList this.displayHideVnfc(); - // Enable or Block Template and PD Tabs - this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }); - + this.buildDesignComponent.getRefData( + { ...this.referenceDataObject, displayVnfc: this.displayVnfc }); this.refernceScopeObj.sourceType = this.referenceDataObject['scopeType']; this.mappingEditorService.getReferenceList().push(JSON.parse(artifactInfo['artifact-content'])); this.tempAllData = JSON.parse(artifactInfo['artifact-content'])['reference_data']; this.oldAction = this.referenceDataObject.action; this.oldVnfcIdentifier = this.vnfcIdentifier; - - this.processReferenceDataAfterRetrieval(); + if (this.referenceDataObject.action === appConstants.Actions.openStackActions) { + this.deviceProtocols = [appConstants.DeviceProtocols.blank, appConstants.DeviceProtocols.openStack]; + this.buildDesignComponent.tabs = [ + { + name: 'Reference Data', + url: 'references', + }]; + } + else { + this.buildDesignComponent.tabs = [ + { + name: 'Reference Data', + url: 'references', + }, { + name: 'Template', + url: 'templates/myTemplates', + }, { + name: 'Parameter Definition', + url: 'parameterDefinitions/create' + }/*, { + name: "Test", + url: 'test', + }*/ + ]; + } this.getArtifactsOpenStack(); } else { this.nService.success('Status', 'Sorry !!! I dont have any artifact Named : ' + (JSON.parse(sessionStorage.getItem('updateParams')))['artifact-name']); @@ -388,19 +383,19 @@ export class ReferenceDataformComponent implements OnInit { } displayHideVnfc() { - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": displayHideVnfc: start..."); - if( this.utilityService.getTracelvl() > 1 ) { - if( this.referenceDataObject.scope['vnfc-type-list'] ) { - console.log( this.classNm+ - ": displayHideVnfc: refDataObj.scope.vnfc-type-list.length="+ - this.referenceDataObject.scope['vnfc-type-list'].length ); - } else { - console.log( this.classNm+ - ": displayHideVnfc: refDataObj.scope.vnfc-type-list not defined"); - }; - console.log( this.classNm+": displayHideVnfc: scope.vnfc-type:["+ - this.referenceDataObject.scope['vnfc-type']+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": displayHideVnfc: start..."); + if (this.utilityService.getTracelvl() > 1) { + if (this.referenceDataObject.scope['vnfc-type-list']) { + console.log(this.classNm + + ": displayHideVnfc: refDataObj.scope.vnfc-type-list.length=" + + this.referenceDataObject.scope['vnfc-type-list'].length); + } else { + console.log(this.classNm + + ": displayHideVnfc: refDataObj.scope.vnfc-type-list not defined"); + }; + console.log(this.classNm + ": displayHideVnfc: scope.vnfc-type:[" + + this.referenceDataObject.scope['vnfc-type'] + "]"); }; if (this.referenceDataObject.scope['vnfc-type-list'] == undefined && (this.referenceDataObject.scope['vnfc-type'] != undefined || this.referenceDataObject.scope['vnfc-type'] != "")) { this.isVnfcType = true @@ -411,20 +406,20 @@ export class ReferenceDataformComponent implements OnInit { this.isVnfcType = false this.displayVnfc = 'true' this.isVnfcTypeList = true - if(!this.mappingEditorService.newObject || !this.mappingEditorService.newObject.vnfc) { + if (!this.mappingEditorService.newObject.vnfc) { this.vnfcIdentifier = this.referenceDataObject.scope['vnfc-type-list'][0]; // this.mappingEditorService.newObject.vnfc = this.vnfcIdentifier; + // this.referenceDataObject['vnfcIdentifier'] = this.vnfcIdentifier; + } else { this.vnfcIdentifier = this.mappingEditorService.newObject.vnfc; } - this.referenceDataObject['vnfcIdentifier'] = this.vnfcIdentifier; - //this.vnfcChanged(this.vnfcIdentifier, FormData); - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": displayHideVnfc: vnfcIdentifier:["+ - this.vnfcIdentifier+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": displayHideVnfc: vnfcIdentifier:[" + + this.vnfcIdentifier + "]"); } if (this.referenceDataObject.scope['vnfc-type-list'] != undefined && this.referenceDataObject.scope['vnfc-type-list'].length == 0 && this.referenceDataObject.scope['vnfc-type'] != undefined && this.referenceDataObject.scope['vnfc-type'].length == 0) { - if(this.displayVnfc == 'true') { + if (this.displayVnfc == 'true') { this.isVnfcType = false this.displayVnfc = 'true' this.isVnfcTypeList = true @@ -439,14 +434,17 @@ export class ReferenceDataformComponent implements OnInit { this.displayVnfc = 'false' this.isVnfcTypeList = false } - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": displayHideVnfc: finish. isVnfcType:["+ - this.isVnfcType+" displayVnfc:["+this.displayVnfc+"] isVnfcTypeList:["+ - this.isVnfcTypeList+"]"); + if (this.utilityService.getTracelvl() > 1) + console.log(this.classNm + ": displayHideVnfc: finish. isVnfcType:[" + + this.isVnfcType + " displayVnfc:[" + this.displayVnfc + "] isVnfcTypeList:[" + + this.isVnfcTypeList + "]"); } - //reinitializing the required values. when changing to template or pd sending the values to mapping service + //reinitializing the required values ngOnDestroy() { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": ngOnDestroy: start:" + + " vnfcIdentifier:[" + this.vnfcIdentifier + "]"); let referenceObject = this.prepareReferenceObject(); this.mappingEditorService.changeNavAppData(this.appData); this.mappingEditorService.changeNavDownloadData(this.downloadData); @@ -455,7 +453,7 @@ export class ReferenceDataformComponent implements OnInit { this.firstArrayElement = []; this.uploadFileName = ''; } - // vaidating the number + numberValidation(event: any) { if (this.numberTest.test(event) && event != 0) { this.numberOfVmTest = true; @@ -466,8 +464,8 @@ export class ReferenceDataformComponent implements OnInit { } // update my vnf pop up session values updateSessionValues(event: any, type: string) { - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": updateSessionValues: type:["+type+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": updateSessionValues: type:[" + type + "]"); if (type === 'action') { sessionStorage.setItem('action', event); } @@ -475,10 +473,8 @@ export class ReferenceDataformComponent implements OnInit { sessionStorage.setItem('vnfType', event); } } - // adding vnfc data for each vm + addVnfcData(vmNumber: number) { - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": addVnfcData: start: vmNumber="+ vmNumber); var newObj = { 'vnfc-instance': this.referenceDataObject.vm[vmNumber].vnfc.length + 1, 'vnfc-type': this.vnfcTypeData, @@ -489,10 +485,11 @@ export class ReferenceDataformComponent implements OnInit { }; this.referenceDataObject.vm[vmNumber].vnfc.push(newObj); } + //validating the vnf and vnfc data in the pop up validateVnfcName(name) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": validateVnfcName: start: name:["+name+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": validateVnfcName: start: name:[" + name + "]"); if (!name.trim() || name.length < 1) { this.errorMessage = ''; this.invalid = true; @@ -511,7 +508,6 @@ export class ReferenceDataformComponent implements OnInit { } } - //to remove the VM's created by the user removeFeature(vmNumber: any, index: any, templateId) { if (this.referenceDataObject.action == "Configure") { @@ -520,8 +516,6 @@ export class ReferenceDataformComponent implements OnInit { if (arrIndex >= vmNumber) { obj["vm-instance"] = obj["vm-instance"] - 1 } - // obj["vm-instance"] = arrIndex+1 - }) } else { let data = this.referenceDataObject.vm.filter(obj => { @@ -542,7 +536,6 @@ export class ReferenceDataformComponent implements OnInit { } } - //utility function while adding VM to check index findVmindex(data, vmNumber, templateId) { return this.referenceDataObject.vm.findIndex(obj => { let x = obj['vm-instance'] == (vmNumber + 1) && templateId == obj['template-id']//true @@ -551,50 +544,19 @@ export class ReferenceDataformComponent implements OnInit { } - //add new VM's to the configure and configmodify. + //add new VM's to the configure addVms() { let arr = []; - let mberOFVm = Number(this.refernceScopeObj.from); - let key - if (this.referenceDataObject.action == 'Configure' || this.referenceDataObject.action == 'ConfigModify') { - key = "vnfcType-id" - } else if (this.referenceDataObject.action == 'ConfigScaleOut') { - key = "template-id" - } - if (this.referenceDataObject.action == 'ConfigScaleOut' || this.referenceDataObject.action == 'Configure' || this.referenceDataObject.action == 'ConfigModify') { - let existingVmsLength = this.referenceDataObject.vm.map(obj => { - if (this.referenceDataObject.action == 'Configure' || this.referenceDataObject.action == 'ConfigModify') { - return obj["vnfcType-id"] == this.templateIdentifier - } else if (this.referenceDataObject.action == 'ConfigScaleOut') { - return obj["template-id"] == this.templateIdentifier - } + if (this.referenceDataObject.action == 'ConfigScaleOut') { + let existingVmsLength = this.referenceDataObject.vm.filter(obj => { + return obj['template-id'] == this.templateIdentifier }).length; - //mberOFVm = existingVmsLength + mberOFVm; + mberOFVm = existingVmsLength + mberOFVm; let index = 0; - let identifierValue - if (this.referenceDataObject.action == 'ConfigScaleOut') { - identifierValue = this.templateIdentifier - } else if (this.referenceDataObject.action == 'Configure' || this.referenceDataObject.action == 'ConfigModify') { - identifierValue = this.vnfcIdentifier - } - - for (var i = 0; i < mberOFVm; i++) { - if (this.referenceDataObject.action == 'Configure' || this.referenceDataObject.action == 'ConfigModify') { - - if (identifierValue && identifierValue != "") { - this.referenceDataObject.vm.push({ 'vnfcType-id': identifierValue, 'vm-instance': (existingVmsLength + index + 1), vnfc: [Object.assign({}, this.Sample)] }); - } else { - this.referenceDataObject.vm.push({ 'vm-instance': (existingVmsLength + index + 1), vnfc: [Object.assign({}, this.Sample)] }); - } - - } else if (this.referenceDataObject.action == 'ConfigScaleOut') { - if (identifierValue && identifierValue != "") { - this.referenceDataObject.vm.push({ 'template-id': identifierValue, 'vm-instance': (existingVmsLength + index + 1), vnfc: [Object.assign({}, this.Sample)] }); - } - - } + for (var i = (existingVmsLength); i < mberOFVm; i++) { + this.referenceDataObject.vm.push({ 'template-id': this.templateIdentifier, 'vm-instance': (existingVmsLength + index + 1), vnfc: [Object.assign({}, this.Sample)] }); index++; } @@ -611,43 +573,25 @@ export class ReferenceDataformComponent implements OnInit { } } - //preparing reference obj with required business use cases + //Reference object to create reference data prepareReferenceObject(isSaving?: any) { - let methName= "prepareReferenceObject"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": start: isSaving:["+ - isSaving+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": prepareReferenceObject: start."); let scopeName = this.resetParamsOnVnfcType(); - let extension = this.referenceDataFormUtil.decideExtension(this.referenceDataObject); + let extension = this.decideExtension(this.referenceDataObject); this.prepareArtifactList(scopeName, extension); - if (this.referenceDataObject.action === 'OpenStack Actions') { this.referenceDataObject['template'] = 'N'; this.referenceDataObject['artifact-list'] = []; this.referenceDataObject['firstRowVmSpreadSheet'] = this.firstArrayElement; } - else{ - this.referenceDataObject['firstRowVmSpreadSheet']=undefined; - } - //ditaching the object from the form and processing pfurther + //detaching the object from the form and processing further let newObj = $.extend(true, {}, this.referenceDataObject); let action = this.referenceDataObject.action; - // if (action=="ConfigScaleOut"){ - // this.referenceDataObject.action="true"; - // } - //preparing Obj for save/download newObj = this.deleteVmsforNonActions(newObj, action) - - if (newObj['device-protocol'] != 'REST') { - delete newObj['url'] - } this.pushOrReplaceTempData(newObj, action); this.addAllActionObj(newObj, scopeName); this.resetTempData() - - - //rmove context url - //if() //saving data to service this.mappingEditorService.getReferenceList().push(JSON.parse(JSON.stringify(this.referenceDataObject))); this.buildDesignComponent.updateAccessUpdatePages(this.referenceDataObject.action, this.mappingEditorService.getReferenceList()); @@ -657,65 +601,74 @@ export class ReferenceDataformComponent implements OnInit { return { totlaRefDtaa: this.tempAllData, scopeName: scopeName }; } - // utility function to check element existence public checkIfelementExistsInArray(element, array) { + //// console.log("Element==" + element) var result: boolean = false; array.forEach(function (item) { + // // console.log("Item==" + item) if (element === item) { + // console.log('Element==' + element + 'Item==' + item); result = true; } } ); return result; } - // when uploading the file + upload(evt: any) { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": upload: start."); /* wire up file reader */ const target: DataTransfer = (evt.target); this.uploadFileName = evt.target.files[0].name; var fileExtension = this.uploadFileName.substr(this.uploadFileName.lastIndexOf('.') + 1); if (target.files.length != 1) { - throw new Error('Cannot upload multiple files on the entry'); + console.log(this.classNm + ": upload: Error: got no file !"); + throw new Error(appConstants.errors.multipleFileUploadError); } + console.log(this.classNm + ": upload: filename:[" + evt.target.files[0].name + "]"); if (fileExtension.toUpperCase() === 'XLS' || fileExtension.toUpperCase() === 'XLSX') { const reader = new FileReader(); reader.onload = (e: any) => { /* read workbook */ const bstr = e.target.result; + // // console.log("print 1---" + bstr); const wb = XLSX.read(bstr, { type: 'binary' }); + // // console.log("print 2---" + JSON.stringify(wb)); /* grab first sheet */ const wsname = wb.SheetNames[0]; + // // console.log("Name:---" + wsname); const ws = wb.Sheets[wsname]; /* save data */ - this.firstArrayElement = [] + let arrData = ((XLSX.utils.sheet_to_json(ws, { header: 1 }))); this.uploadedDataArray = arrData; - for (var i = 0; i < arrData[0].length; i++) { - this.firstArrayElement.push(arrData[0][i].replace(/[\n\r]+/g, '')) - } + this.firstArrayElement = arrData[0]; var remUploadedDataArray = arrData; remUploadedDataArray.shift(); this.remUploadedDataArray = remUploadedDataArray; if (arrData != null) { this.getExcelUploadStatus = true; - this.nService.success('Success', 'Vm capabilities data uploaded successfully'); + this.nService.success(appConstants.notifications.titles.success, appConstants.messages.vmDataUploadSuccess); } else { - this.nService.success('Error', 'Empty Vm capabilities file uploaded'); + this.nService.success(appConstants.notifications.titles.error, appConstants.messages.emptyVmUpload); } }; reader.readAsBinaryString(target.files[0]); } else { - this.nService.error('Error', 'Incorrect VM capabilities file uploaded'); + this.nService.error(appConstants.notifications.titles.error, appConstants.messages.incorrectVmUpload); } } addVmCapabilitiesData() { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": addVmCapabilitiesData: start."); for (var i = 0; i < this.uploadedDataArray.length; i++) { var vnfcFuncCodeArray = []; var data = this.uploadedDataArray[i]; @@ -723,7 +676,6 @@ export class ReferenceDataformComponent implements OnInit { if (data[j] != undefined) { if (data[j].toUpperCase() === 'Y') { vnfcFuncCodeArray.push(this.firstArrayElement[j]); - //vnfcFuncCodeArray.push({name:this.firstArrayElement[j]}); } } } @@ -734,7 +686,7 @@ export class ReferenceDataformComponent implements OnInit { 'action-level': 'vm', 'scope': { 'vnf-type': this.referenceDataObject['scope']['vnf-type'], //need to confirm what should be this value - 'vnfc-type-list': null + 'vnfc-type': null }, 'vnfc-function-code-list': vnfcFuncCodeArray, 'template': 'N', @@ -747,76 +699,88 @@ export class ReferenceDataformComponent implements OnInit { } } - //download the templae pd and reference file with all the actions added. + //download template save(form: any, isValid: boolean) { - // will show error message - this.showValidationErrors(this.referenceDataObject); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": save: start: referenceDataObject.action:[" + + this.referenceDataObject.action + "]"); + if (this.referenceDataObject.action === '') { + this.nService.error(appConstants.notifications.titles.error, appConstants.errors.noActionError); + return; + } + if (this.referenceDataObject['device-protocol'] === '') { + this.nService.error(appConstants.notifications.titles.error, appConstants.errors.noDeviceProtocolError); + return; + } if (isValid) { let referenceObject = this.prepareReferenceObject(); - let removedKeysArray = [] - this.tempAllData.forEach((data, index) => { - if (data.action) { - removedKeysArray.push(JSON.parse(JSON.stringify(this.deleteUnwantedKeys(data)))) - } - }); - this.tempAllData = removedKeysArray; - /* var tempAllData = this.tempAllData; - tempAllData=this.removeParamFileNameBeforeSave(tempAllData)*/ - - //tempAllData["artifact_list"]=newArtifactList; let theJSON = JSON.stringify({ 'reference_data': this.tempAllData }, null, '\t'); let uri = 'data:application/json;charset=UTF-8,' + encodeURIComponent(theJSON); this.downloadData.reference = theJSON; - let referenceFileName = 'reference_AllAction_' + this.referenceDataObject.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + '0.0.1V.json'; - this.utilityService.downloadArtifactToPc(theJSON, 'json', referenceFileName, 100); this.validateTempAllData(); + var blob = new Blob([theJSON], { + type: 'text/plain' + }); + let fileName = 'reference_AllAction_' + referenceObject.scopeName + '_' + '0.0.1V.json'; + this.downloadFile(blob, fileName, 100) var templateData = JSON.stringify(this.downloadData.template.templateData); - var templateFileName = this.downloadData.template.templateFileName; - if (templateFileName != null || templateFileName != '') { - var fileExtensionArr = templateFileName.split('.'); - } - var nameValueFileName = this.downloadData.template.nameValueFileName; - let pdFileName = this.downloadData.pd.pdFileName; var nameValueData = JSON.stringify(this.downloadData.template.nameValueData); var pdData = this.downloadData.pd.pdData; - if (templateData != '{}' && templateData != null && templateData != undefined) this.utilityService.downloadArtifactToPc(this.downloadData.template.templateData, fileExtensionArr[1], templateFileName, 130); - if (nameValueData != '{}' && nameValueData != null && nameValueData != undefined) this.utilityService.downloadArtifactToPc(this.downloadData.template.nameValueData, 'json', nameValueFileName, 160); - if (pdData != '' && pdData != null && pdData != undefined) this.utilityService.downloadArtifactToPc(pdData, 'yaml', pdFileName, 180); + if (templateData != '{}' && templateData != null && templateData != undefined) this.downloadTemplate(); + if (nameValueData != '{}' && nameValueData != null && nameValueData != undefined) this.downloadNameValue(); + if (pdData != '' && pdData != null && pdData != undefined) this.downloadPd(); } } + downloadFile(blob, fileName, delay) { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": downloadFile: start."); + setTimeout(() => { + saveAs(blob, fileName); + }, delay) + } + + downloadTemplate() { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": downloadTemplate: start."); + var fileName = this.downloadData.template.templateFileName; + console.log(this.classNm + ": downloadTemplate: fileName:[" + fileName + "]"); + var theJSON = this.downloadData.template.templateData; + if (fileName != null || fileName != '') { + var fileExtensionArr = fileName.split('.'); + var blob = new Blob([theJSON], { + type: 'text/' + fileExtensionArr[1] + }); + this.downloadFile(blob, fileName, 130) + } + } + + downloadNameValue() { + var fileName = this.downloadData.template.nameValueFileName; + var theJSON = this.downloadData.template.nameValueData; + var blob = new Blob([theJSON], { + type: 'text/json' + }); + + this.downloadFile(blob, fileName, 160) + } + + downloadPd() { + let fileName = this.downloadData.pd.pdFileName; + let theJSON = this.downloadData.pd.pdData; + var blob = new Blob([theJSON], { + type: 'text/plain' + }); + + this.downloadFile(blob, fileName, 180) + } - /* removeParamFileNameBeforeSave(tempAllData) - { - var newArtifactList = []; - var element={}; - for (var i = 0; i < tempAllData.length; i++) { - if (this.checkIfelementExistsInArray(tempAllData[i].action,this.actions)) { - var artifactList = tempAllData[i]["artifact-list"] - - for (var j = 0; j < artifactList.length; j++) { - if (artifactList[j]["artifact-type"] != "param_values") { - element = artifactList[j]; - newArtifactList.push(element); - } - } - tempAllData[i]["artifact-list"] = newArtifactList - newArtifactList = []; - element={}; - } - } - return tempAllData; - }*/ // save the values to the cache, on action change without download - validateDataAndSaveToAppc( valid, form, event) { - let methName= "validateDataAndSaveToAppc"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": start: valid:["+valid+"]"); + validateDataAndSaveToAppc(valid, form, event) { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": validateDataAndSaveToAppc: start: valid:" + valid); // will show error message this.showValidationErrors(this.referenceDataObject); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": tempAllData:["+ - JSON.stringify(this.tempAllData)+"]"); try { form._submitted = true; if (valid) { @@ -846,18 +810,18 @@ export class ReferenceDataformComponent implements OnInit { this.nService.warn('status', 'unable to save the artifact'); } } + //this method saves reference, template, param and PD data to APPC saveToAppc() { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": saveToAppc: start: vnf-type:["+ - this.referenceDataObject.scope['vnf-type']+"]"); - let theJSON = JSON.stringify( this.tempAllData ); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": saveToAppc: tempAllData:["+theJSON+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": saveToAppc: start: vnf-type:[" + + this.referenceDataObject.scope['vnf-type'] + "]"); + let theJSON = JSON.stringify(this.tempAllData); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": saveToAppc: tempAllData:[" + theJSON + "]"); let fileName = 'reference_AllAction_' + this.referenceDataObject.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + '0.0.1V.json'; - /*var tempAllData=this.removeParamFileNameBeforeSave(this.tempAllData); - this.tempAllData=tempAllData;*/ - this.saveReferenceDataToAppc(JSON.stringify({ reference_data: this.tempAllData }), this.tempAllData[this.tempAllData.length - 1], fileName); + this.saveReferenceDataToAppc( + JSON.stringify({ reference_data: this.tempAllData }), this.referenceDataObject.scope['vnf-type'], fileName); var templateData = JSON.stringify(this.appData.template.templateData); var nameValueData = JSON.stringify(this.appData.template.nameValueData); @@ -869,6 +833,8 @@ export class ReferenceDataformComponent implements OnInit { // valaidation of template data validateTempAllData() { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": validateTempAllData: start."); if (this.tempAllData) { var updatedData = []; this.tempAllData.forEach(data => { @@ -880,12 +846,14 @@ export class ReferenceDataformComponent implements OnInit { } } - //preparig and send the data to the API. - saveReferenceDataToAppc(artifactData, dataJson, fileName) { + //.. prepare and send the data to the API. + saveReferenceDataToAppc(artifactData, vnf_type, fileName) { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": saveReferenceDataToAppc: start: vnf_type:[" + + vnf_type + "]"); let data = []; let slashedPayload = this.referenceDataFormUtil.appendSlashes(artifactData); - - let payload = this.utilityService.createPayLoadForSave("reference_data", dataJson['scope']['vnf-type'], "AllAction", fileName, this.versionNoForApiCall, slashedPayload); + let payload = this.utilityService.createPayLoadForSave("reference_data", vnf_type, "AllAction", fileName, this.versionNoForApiCall, slashedPayload); this.ngProgress.start(); this.httpUtils.post({ url: environment.getDesigns, @@ -909,8 +877,9 @@ export class ReferenceDataformComponent implements OnInit { this.ngProgress.done(); }, 3500); } - // if no data present in the session, fetching data from API + retriveFromAppc() { + console.log(this.classNm + ": retriveFromAppc: start."); if (sessionStorage.getItem('updateParams') != 'undefined') { this.getArtifact(); this.noCacheData = false; @@ -919,11 +888,22 @@ export class ReferenceDataformComponent implements OnInit { } } + cloneMessage(servermessage) { + var clone = {}; + for (var key in servermessage) { + if (servermessage.hasOwnProperty(key)) //ensure not adding inherited props + clone[key] = servermessage[key]; + } + return clone; + } + public showUpload() { this.selectedUploadType = this.uploadTypes[0].value; }; - // used when user uploads a file using upload file + public fileChange(input) { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": fileChange: start."); this.fileName = input.target.files[0].name.replace(/C:\\fakepath\\/i, ''); this.fileUploaded = true; this.disableRetrieve = true; @@ -945,7 +925,6 @@ export class ReferenceDataformComponent implements OnInit { return; } } - this.displayVnfc = 'false'; this.isVnfcType = false; this.isVnfcTypeList = false; @@ -955,37 +934,55 @@ export class ReferenceDataformComponent implements OnInit { this.displayVnfc = 'true'; this.isVnfcTypeList = true; this.vnfcIdentifier = obj.scope['vnfc-type-list'][0]; - } } - this.oldAction=obj.action; + this.oldAction = obj.action; this.tempAllData = JSON.parse(JSON.stringify(jsonObject)); - //check vnfc tyoe list for old files - // if (this.referenceDataObject.scope['vnfc-type-list'] == undefined) { - // this.tempAllData = [] - // this.referenceDataObject = { - // action: '', - // 'action-level': 'vnf', - // scope: { 'vnf-type': '', 'vnfc-type-list': [] }, - // 'template': 'Y', - // vm: [], - // 'device-protocol': '', - // 'user-name': '', - // 'port-number': '', - // 'artifact-list': [] - // } - // this.nService.error('Error', 'Incorrect file format'); - // return - // } + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": fileChange: read & parsed."); this.notificationService.notifySuccessMessage('Reference Data file successfully uploaded..'); - this.highlightSelectedActions(jsonObject) + if (jsonObject instanceof Array) { + this.referenceDataObject = jsonObject[0]; + jsonObject.forEach(obj => { + this.selectedActions.push(obj.action); + }); + } else { + this.referenceDataObject = jsonObject; + + this.selectedActions.push(jsonObject.action); + } + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": fileChange: " + + "referenceDataObject.action:[" + + this.referenceDataObject.action + "]"); this.toggleIdentifier(this.referenceDataObject.action) - this.populateExistinAction(this.referenceDataObject.action) this.configDrp(this.referenceDataObject.action) - - - this.processReferenceDataAfterRetrieval(); - + if (this.referenceDataObject.action === 'OpenStack Actions') { + this.deviceProtocols = ['', 'OpenStack']; + this.buildDesignComponent.tabs = [ + { + type: 'dropdown', + name: 'Reference Data', + url: 'references', + }]; + } + else { + this.buildDesignComponent.tabs = [ + { + name: 'Reference Data', + url: 'references', + }, { + name: 'Template', + url: 'templates/myTemplates', + }, { + name: 'Parameter Definition', + url: 'parameterDefinitions/create' + } /*, { + name: "Test", + url: 'test', + }*/ + ]; + } this.getArtifactsOpenStack(); if (this.referenceDataObject.template == null) { this.referenceDataObject.template = 'Y'; @@ -993,37 +990,27 @@ export class ReferenceDataformComponent implements OnInit { if (this.referenceDataObject['action-level'] == null) { this.referenceDataObject['action-level'] = 'VNF'; } - - + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": fileChange: displayVnfc:[" + + this.displayVnfc + "]"); // Enable or Block Template and PD Tabs - this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }); + this.buildDesignComponent.getRefData( + { ...this.referenceDataObject, displayVnfc: this.displayVnfc }); } catch (e) { - this.nService.error('Error', 'Incorrect file format'); + this.nService.error(appConstants.notifications.titles.error, appConstants.messages.incorrectFileFormat); } } this.hideModal = true; }); } else { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": fileChange: Error: Failed to read file!"); this.notificationService.notifyErrorMessage('Failed to read file..'); } - - } - - // Highlights selected action on new file upload and on existing VNF - public highlightSelectedActions(jsonObject) { - if (jsonObject instanceof Array) { - this.referenceDataObject = jsonObject[0]; - jsonObject.forEach(obj => { - this.selectedActions.push(obj.action); - }); - } else { - this.referenceDataObject = jsonObject; - - this.selectedActions.push(jsonObject.action); - } } public readFile(file, reader, callback) { + console.log(this.classNm + ": readFile: start."); // Set a callback funtion to fire after the file is fully loaded reader.onload = () => { // callback with the results @@ -1037,8 +1024,9 @@ export class ReferenceDataformComponent implements OnInit { fileChangeEvent(fileInput: any) { let obj: any = fileInput.target.files; } - //resetting the values + clearVnfcData() { + console.log(this.classNm + ": clearVnfcData: start."); this.Sample = { 'vnfc-instance': '1', 'vnfc-function-code': '', @@ -1061,9 +1049,10 @@ export class ReferenceDataformComponent implements OnInit { // this.referenceDataObject.scope['vnfc-type'] = ''; // } // } - // resetting the form + resetForm() { - console.log( this.classNm+": resetForm: start."); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": resetForm: start."); this.referenceDataObject['action-level'] = 'vnf'; this.referenceDataObject.template = 'Y'; this.referenceDataObject['device-protocol'] = ''; @@ -1075,12 +1064,8 @@ export class ReferenceDataformComponent implements OnInit { // this method gets called with the action as parameter and the respective action details are fetched and assigned to the current page populateExistinAction(data) { - let methName= "populateExistinAction"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": start: data:["+data+"]"); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": tempAllData:["+ - JSON.stringify(this.tempAllData)+"]"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": populateExistinAction: start."); let existAction = this.tempAllData.findIndex(obj => { return obj.action == data; }); @@ -1091,11 +1076,12 @@ export class ReferenceDataformComponent implements OnInit { this.referenceDataObject.scope['vnfc-type-list'] = obj['scope']['vnfc-type-list']; this.referenceDataObject['device-protocol'] = obj['device-protocol']; this.refernceScopeObj['sourceType'] = obj['scopeType']; - if(obj['scope']['vnfc-type-list'] != undefined && obj['scope']['vnfc-type-list'].length >0) { + if (obj['scope']['vnfc-type-list'] != undefined && obj['scope']['vnfc-type-list'].length > 0) { this.referenceDataObject['vnfcIdentifier'] = obj['scope']['vnfc-type-list'][0]; } } else { - console.log( this.classNm+": populateExistinAction: action not found"); + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": populateExistinAction: action not found"); this.resetForm(); this.referenceDataObject.action = data; } @@ -1108,6 +1094,7 @@ export class ReferenceDataformComponent implements OnInit { case 'UpgradeBackout': case 'ResumeTraffic': case 'QuiesceTraffic': + case 'DistributeTraffic': case 'UpgradeBackup': case 'UpgradePostCheck': case 'UpgradePreCheck': @@ -1133,38 +1120,38 @@ export class ReferenceDataformComponent implements OnInit { } } - //Modal pop up for action change with values entered. - actionChange( data, userForm) { - let methName= "actionChange"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": start: data:["+data+"]"+ - " userForm.valid:["+userForm.valid+"]"); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": tempAllData:["+ - JSON.stringify(this.tempAllData)+"]"); + //Modal pop up for action change with values entered. + actionChange(data, userForm) { + var methName = "actionChange"; + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": " + methName + ": start: data:[" + data + "]" + + " userForm.valid:[" + userForm.valid + "]"); this.disableGrpNotationValue = false if (data == null) { - console.log( this.classNm+": "+methName+": data == null"); + console.log(this.classNm + ": " + methName + ": data == null"); return; } - if((userForm.valid) && this.oldAction != '' && this.oldAction != undefined) { + if ((userForm.valid) && this.oldAction != '' && this.oldAction != undefined) { this.actionChanged = true; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+ - ": userForm valid and oldAction defined"); + console.log(this.classNm + ": " + methName + + ": userForm valid and oldAction defined"); // Calling common Confirmation Modal let disposable = this.dialogService.addDialog(ConfirmComponent) - .subscribe((isConfirmed)=>{ + .subscribe((isConfirmed) => { //We get dialog result - if(isConfirmed) { + console.log(this.classNm + ": " + methName + ": isConfirmed:[" + + isConfirmed + "]"); + if (isConfirmed) { // User clicked on Yes this.currentAction = this.referenceDataObject.action; + console.log(this.classNm + ": " + methName + + ": clicked on Yes: currentAction:[" + this.currentAction + + "] oldAction:[" + this.oldAction + "]"); this.referenceDataObject.action = this.oldAction; $('#saveToAppc').click();//make sure the save all is done before the tempall obj is saved form the API this.toggleIdentifier(data) this.oldAction = this.currentAction;// this.referenceDataObject.action + ''; - this.referenceDataObject.action = this.currentAction - + this.referenceDataObject.action = this.currentAction; this.populateExistinAction(data); if (this.oldAction === 'OpenStack Actions') { @@ -1186,6 +1173,8 @@ export class ReferenceDataformComponent implements OnInit { // User clicked on No this.toggleIdentifier(data) this.currentAction = this.referenceDataObject.action; + console.log(this.classNm + ": " + methName + + ": clicked on No: currentAction:[" + this.currentAction + "]"); this.populateExistinAction(data); this.resetVmsForScaleout(data); this.oldAction = this.referenceDataObject.action + ''; @@ -1194,27 +1183,27 @@ export class ReferenceDataformComponent implements OnInit { this.refernceScopeObj.from = ''; } - if (this.referenceDataObject.action === 'Configure' || this.referenceDataObject.action === 'ConfigModify') { - this.isConfigOrConfigModify = true; + if (this.referenceDataObject.action === 'Configure' || this.referenceDataObject.action === 'ConfigModify' || this.referenceDataObject.action === 'DistributeTraffic') { + this.isConfigureAction = true; } else { - this.isConfigOrConfigModify = false; + this.isConfigureAction = false; delete this.mappingEditorService.newObject['vnfc']; } - + // Enable or Block Template and PD Tabs if (this.currentAction == 'ConfigScaleOut' && this.templateIdentifier && this.templateIdentifier != '') { // let referenceDataObjectTemp = this.referenceDataObject; // referenceDataObjectTemp['template-id'] = this.templateIdentifier; // this.buildDesignComponent.getRefData(referenceDataObjectTemp); this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }, { reqField: this.templateIdentifier }); - + } else { this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }); - } + } }); } else { - console.log( this.classNm+": "+methName+ - ": userForm Not valid or oldAction not defined"); + console.log(this.classNm + ": " + methName + + ": userForm Not valid or oldAction not defined"); this.actionChanged = true; this.currentAction = this.referenceDataObject.action; this.oldAction = this.referenceDataObject.action + ''; @@ -1223,7 +1212,7 @@ export class ReferenceDataformComponent implements OnInit { this.toggleIdentifier(data); // Enable or Block Template and PD Tabs - if(this.currentAction == 'ConfigScaleOut' && this.templateIdentifier) { + if (this.currentAction == 'ConfigScaleOut' && this.templateIdentifier) { // let referenceDataObjectTemp = this.referenceDataObject; // referenceDataObjectTemp['template-id'] = this.templateIdentifier; // this.buildDesignComponent.getRefData(referenceDataObjectTemp); @@ -1232,61 +1221,74 @@ export class ReferenceDataformComponent implements OnInit { this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }); } } - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": tempAllData:["+ - JSON.stringify(this.tempAllData)+"]"); this.configDrp(data) } configDrp(data) { - console.log( this.classNm+": configDrp: start: data:["+data+"]"); + console.log(this.classNm + ": configDrp: start: data:[" + data + "]"); if (data == 'ConfigScaleOut') { this.groupAnotationType = ['', 'first-vnfc-name', 'fixed-value', 'relative-value', 'existing-group-name']; } else { this.groupAnotationType = ['', 'first-vnfc-name', 'fixed-value', 'relative-value']; } if (data == 'OpenStack Actions') { - this.buildDesignComponent.tabs = this.referencDataTab; + this.buildDesignComponent.tabs = [ + { + type: 'dropdown', + name: 'Reference Data', + url: 'references', + }]; } else { - this.buildDesignComponent.tabs = this.allTabs; + this.buildDesignComponent.tabs = [ + { + name: 'Reference Data', + url: 'references', + }, { + name: 'Template', + url: 'templates/myTemplates', + }, { + name: 'Parameter Definition', + url: 'parameterDefinitions/create' + }/*, { + name: "Test", + url: 'test', + }*/ + ]; } - if (data == 'Configure' || data == 'ConfigModify') { + if (data == 'Configure' || data == 'ConfigModify' || data == 'DistributeTraffic') { this.nonConfigureAction = false; } else { this.nonConfigureAction = true; } } - // removing and adding the url key based on the protocol selected + deviceProtocolChange() { - let methName= "deviceProtocolChange"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": start."); + console.log(this.classNm + ": deviceProtocolChange: start."); if (this.referenceDataObject['device-protocol'] == 'REST') { } else { delete this.referenceDataObject['context-url'] } // Enable or Block Template and PD Tabs - this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }, {reqField: this.templateIdentifier}) - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": tempAllData:["+ - JSON.stringify(this.tempAllData)+"]"); + this.buildDesignComponent.getRefData( + { ...this.referenceDataObject, displayVnfc: this.displayVnfc }, + { reqField: this.templateIdentifier }); } // used to call or trigger save object on template Identifier changes idChange(data, userForm) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": idChange: start: data:["+data+"]"); + console.log(this.classNm + ": idChange: start: data:[" + data + "]"); if (data == null) { return; } - // Enable or Block Template and PD Tabs // let referenceDataObjectTemp = this.referenceDataObject; // referenceDataObjectTemp['template-id'] = data; // this.buildDesignComponent.getRefData(referenceDataObjectTemp); - this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }, { reqField: data }); + this.buildDesignComponent.getRefData( + { ...this.referenceDataObject, displayVnfc: this.displayVnfc }, + { reqField: data }); if ((userForm.valid)) { this.currentAction = "ConfigScaleOut" @@ -1294,95 +1296,78 @@ export class ReferenceDataformComponent implements OnInit { let referenceObject = this.prepareReferenceObject(); this.actionChanged = true; if (this.templateIdentifier) { - // Calling common Confirmation Modal - let disposable = this.dialogService.addDialog(ConfirmComponent) - .subscribe((isConfirmed)=>{ - //We get dialog result - if(isConfirmed) { - // User clicked on Yes - this.validateTempAllData(); - this.saveToAppc(); - this.clearCache(); - this.clearVnfcData(); - this.refernceScopeObj.from = ''; - } - else { - // User clicked on No - this.clearCache(); - this.refernceScopeObj.from = ''; - } - }); + // Calling common Confirmation Modal + let disposable = this.dialogService.addDialog(ConfirmComponent) + .subscribe((isConfirmed) => { + //We get dialog result + if (isConfirmed) { + // User clicked on Yes + this.validateTempAllData(); + this.saveToAppc(); + this.clearCache(); + this.clearVnfcData(); + this.refernceScopeObj.from = ''; + } + else { + // User clicked on No + this.clearCache(); + this.refernceScopeObj.from = ''; + } + }); } } else { - this.oldtemplateIdentifier = this.templateIdentifier + this.oldtemplateIdentifier = this.templateIdentifier; } - - // if (this.referenceDataObject.action == 'ConfigScaleOut' && data ) { - // let referenceDataObjectTemp = this.referenceDataObject; - // referenceDataObjectTemp['selectedTemplateId'] = data; - // this.buildDesignComponent.getRefData(referenceDataObjectTemp); - // } else { - // this.buildDesignComponent.getRefData(this.referenceDataObject); - // } } // used to call or trigger save object on multiple VNFC's changes - vnfcChanged( data, userForm) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": vnfcChanged: new vnfcIdentifier:["+data+"]"); - if( this.utilityService.getTracelvl() > 1 ) - console.log( this.classNm+": vnfcChanged: oldVnfcIdentifier:["+ - this.oldVnfcIdentifier+"]"); - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": vnfcChanged: scope.vnfc-type:["+ - this.referenceDataObject.scope['vnfc-type']+"]"); + vnfcChanged(data, userForm) { + console.log(this.classNm + ": vnfcChanged: new vnfcIdentifier:[" + data + "]"); + console.log(this.classNm + ": vnfcChanged: oldVnfcIdentifier:[" + + this.oldVnfcIdentifier + "]"); + console.log(this.classNm + ": vnfcChanged: scope.vnfc-type:[" + + this.referenceDataObject.scope['vnfc-type'] + "]"); this.vnfcIdentifier = data; - //this.clearCache(); + this.clearCache(); if (data == null) { return; } - + //.. populate VNFC Type in Sample field + this.setVnfcTypeInSample(this.vnfcIdentifier); // Enable or Block Template and PD Tabs let referenceDataObjectTemp = this.referenceDataObject; referenceDataObjectTemp['vnfcIdentifier'] = data; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+ - ": vnfcChanged: displayVnfc:["+this.displayVnfc+"]"); - //this.buildDesignComponent.getRefData(referenceDataObjectTemp); - this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }, { reqField: data }); - - - console.log( this.classNm+ - ": vnfcChanged: userForm.valid:["+userForm.valid+"]"); + console.log(this.classNm + + ": vnfcChanged: displayVnfc:[" + this.displayVnfc + "]"); + this.buildDesignComponent.getRefData( + { ...this.referenceDataObject, displayVnfc: this.displayVnfc }, + { reqField: data }); + console.log(this.classNm + + ": vnfcChanged: userForm.valid:[" + userForm.valid + "]"); if ((userForm.valid) && this.oldVnfcIdentifier != '' && this.oldVnfcIdentifier != undefined) { this.currentAction = this.referenceDataObject.action this.oldVnfcIdentifier = this.vnfcIdentifier let referenceObject = this.prepareReferenceObject(); this.actionChanged = true; if (this.vnfcIdentifier) { - // Calling common Confirmation Modal - let disposable = this.dialogService.addDialog(ConfirmComponent) - .subscribe((isConfirmed)=>{ - //We get dialog result - if(isConfirmed) { - // User clicked on Yes - this.validateTempAllData(); - this.saveToAppc(); - this.clearCache(); - this.clearVnfcData() - this.refernceScopeObj.from = ''; - //.. populate VNFC Type in Sample field - this.setVnfcTypeInSample( this.vnfcIdentifier ); - } - else { - // User clicked on No - this.clearCache(); - this.clearVnfcData() - this.refernceScopeObj.from = ''; - //.. populate VNFC Type in Sample field - this.setVnfcTypeInSample( this.vnfcIdentifier ); - } - }); + // Calling common Confirmation Modal + let disposable = this.dialogService.addDialog(ConfirmComponent) + .subscribe((isConfirmed) => { + //We get dialog result + if (isConfirmed) { + // User clicked on Yes + this.validateTempAllData(); + this.saveToAppc(); + this.clearCache(); + this.clearVnfcData() + this.refernceScopeObj.from = ''; + } + else { + // User clicked on No + this.clearCache(); + this.refernceScopeObj.from = ''; + } + }); } } else { if (data != null) { @@ -1391,9 +1376,8 @@ export class ReferenceDataformComponent implements OnInit { } } - clearCache() - //needed for the the clearing template cache. - { + clearCache() { + console.log(this.classNm + ": clearCache: start."); // get the value and save the userid and persist it. this.clearTemplateCache(); this.clearPdCache(); @@ -1414,6 +1398,74 @@ export class ReferenceDataformComponent implements OnInit { this.paramShareService.setSessionParamData(undefined); } + saveTemp() { + console.log(this.classNm + ": saveTemp: start."); + this + .httpUtils + .post( + { url: environment.getDesigns, data: this.appData.template.templateData }) + .subscribe(resp => { + if (resp.output.status.code === '400' && resp.output.status.message === 'success') { + this.nService.success('Status', 'Successfully uploaded the Template Data'); + } + if (resp.output.status.code === '401') { + this.nService.warn('Status', 'Error in saving the Template to Appc'); + + } + }, + (err) => this.nService.error('Status', 'Error Connecting to the APPC Network')); + } + + saveNameValue() { + console.log(this.classNm + ": saveNameValue: start."); + this + .httpUtils + .post( + { + url: environment.getDesigns, data: this.appData.template.nameValueData + }) + .subscribe(resp => { + if (resp.output.status.code === '400' && resp.output.status.message === 'success') { + this.nService.success('Status', 'Successfully uploaded the Name Value Pairs'); + } + if (resp.output.status.code === '401') { + this.nService.warn('Status', 'Error in saving the Name value pairs to Appc'); + } + }, + error => { + this.nService.error('Status', 'Error Connecting to the APPC Network'); + return false; + }); + } + + savePd() { + this + .httpUtils + .post( + { + url: environment.getDesigns, data: this.appData.pd + }) + .subscribe(resp => { + if (resp.output.status.code === '400' && resp.output.status.message === 'success') { + this.nService.success('Status', 'Successfully uploaded PD file'); + } + if (resp.output.status.code === '401') { + this.nService.warn('Status', 'Error in saving the PD to Appc'); + } + }, + error => { + this.nService.error('Status', 'Error Connecting to the APPC Network'); + return false; + }); + } + + openModel(toShow: any, message: any, title: any) { + console.log(this.classNm + ": openModel: start: title:[" + title + "]"); + this.modalComponent.isShow = toShow; + this.modalComponent.message = message; + this.modalComponent.title = title; + } + browseOption() { $('#inputFile').trigger('click'); } @@ -1422,13 +1474,9 @@ export class ReferenceDataformComponent implements OnInit { $('#excelInputFile').trigger('click'); } - /* showIdentifier() { - $('#identifierModal').modal(); - } - - showVnfcPopup() { - $('#vnfcModal').modal(); - }*/ + showIdentifier() { + $('#identifierModal').modal(); + } addToIdentDrp() { if (!(this.referenceDataObject['template-id-list'])) { @@ -1437,48 +1485,49 @@ export class ReferenceDataformComponent implements OnInit { if (!(this.referenceDataObject['template-id-list'].indexOf(this.templateId.trim()) > -1)) { this.referenceDataObject['template-id-list'].push(this.templateId.trim()); } - - // Changing newVnfcType value to blank otherwise it will show previous value in text box of popup - this.templateId = '' + // Changing value to blank otherwise it will show previous value in text box of popup + this.templateId = ''; } + // adds the vnfc to the vnfc dropdown list addVnfc() { - var newVnfcTypeV= this.newVnfcType.trim(); - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+ - ": addVnfc: start: newVnfcTypeV:["+newVnfcTypeV+"]"); + var newVnfcTypeV = this.newVnfcType.trim(); + console.log(this.classNm + + ": addVnfc: start: newVnfcTypeV:[" + newVnfcTypeV + "]"); if (!(this.referenceDataObject.scope['vnfc-type-list'])) { this.referenceDataObject.scope['vnfc-type-list'] = []; - this.vnfcIdentifier = newVnfcTypeV; - } else { - this.vnfcIdentifier = newVnfcTypeV; + // this.vnfcIdentifier = newVnfcTypeV; + } else if (this.referenceDataObject.scope['vnfc-type-list'].length == 0) { + // this.vnfcIdentifier = newVnfcTypeV; } - //this.referenceDataObject['vnfcIdentifier'] = this.vnfcIdentifier; + this.vnfcIdentifier = newVnfcTypeV; + console.log(this.classNm + + ": addVnfc: vnfcIdentifier:[" + this.vnfcIdentifier + "]"); if (!(this.referenceDataObject.scope['vnfc-type-list'].indexOf(newVnfcTypeV) > -1)) { this.referenceDataObject.scope['vnfc-type-list'].push(newVnfcTypeV); } this.tempAllData.forEach(obj => { - if (obj.action == "Configure" || obj.action == "ConfigModify") { + if (obj.action == "Configure" || obj.action == "ConfigModify" || obj.action == "DistributeTraffic") { obj.scope['vnfc-type-list'] = this.referenceDataObject.scope['vnfc-type-list'] } this.resetArtifactList(obj); }); - //this.buildDesignComponent.getRefData({ ...this.referenceDataObject, displayVnfc: this.displayVnfc }); - this.setVnfcTypeInSample( newVnfcTypeV ); - let userForm = {valid: true}; - this.vnfcChanged(this.newVnfcType, userForm) + console.log(this.classNm + ": addVnfc: scope vnfc-type:[" + + this.referenceDataObject.scope['vnfc-type'] + "]"); + this.setVnfcTypeInSample(newVnfcTypeV); // Changing newVnfcType value to blank otherwise it will show previous value in text box of popup this.newVnfcType = '' } resetVms() { + console.log(this.classNm + ": resetVms: start."); this.referenceDataObject.vm = []; } dataModified() { // this.referenceDataObject.vm = this.referenceDataObject.vm; } - // used to show and hide the group notation value in VNFC information + resetGroupNotation() { if (this.Sample['group-notation-type'] == "existing-group-name") { this.Sample['group-notation-value'] = "" @@ -1505,121 +1554,98 @@ export class ReferenceDataformComponent implements OnInit { } resetParamsOnVnfcType() { - let scopeName: any; - let vnfcTypeList = this.referenceDataObject.scope['vnfc-type-list'] - let vnfcType = this.referenceDataObject.scope['vnfc-type'] - let vnfType = this.referenceDataObject.scope['vnf-type']; - //called only if only vnf is there - if ((this.referenceDataFormUtil.nullCheckForVnfcTypeList(vnfcTypeList)) && (this.referenceDataFormUtil.nullCheckForVnfcType(vnfcType)) - ) { - scopeName = vnfType; + console.log(this.classNm + ": resetParamsOnVnfcType: start:\n " + + "ref.DataObject.scope vnfc-type:[" + + this.referenceDataObject.scope['vnfc-type'] + "]"); + let scopeName = ''; + //if only vnf is there + if (this.referenceDataObject.scope['vnfc-type'] == '' || this.referenceDataObject.scope['vnfc-type'] == null || this.referenceDataObject.scope['vnfc-type'] == 'null') { + scopeName = this.referenceDataObject.scope['vnf-type']; this.referenceDataObject.scope['vnfc-type'] = ''; this.referenceDataObject['action-level'] = 'vnf'; this.referenceDataObject['scopeType'] = 'vnf-type'; - scopeName = scopeName.replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, ''); } //if VNFC is entered set action level & Scope type to VNFC for configure and configure modify, and default the values to vnf and vnf type for all other actions else { - if (this.referenceDataFormUtil.nullCheckForVnfcTypeList(vnfcTypeList)) { - scopeName = vnfcType ? vnfcType : ""; - } else { - // scopeName = this.referenceDataObject.scope['vnfc-type-list']; - } - - if (this.referenceDataObject.action == 'Configure' || this.referenceDataObject.action == 'ConfigModify') { - this.referenceDataObject['action-level'] = 'vnf'; + scopeName = this.referenceDataObject.scope['vnfc-type']; + if (this.referenceDataObject.action == 'Configure' || this.referenceDataObject.action == 'ConfigModify' || this.referenceDataObject.action == 'DistributeTraffic') { + this.referenceDataObject['action-level'] = 'vnfc'; this.referenceDataObject['scopeType'] = 'vnfc-type'; } else { this.referenceDataObject['action-level'] = 'vnf'; this.referenceDataObject['scopeType'] = 'vnf-type'; } } - this.referenceDataObject.scope['vnfc-type'] = this.referenceDataObject.scope['vnfc-type'] ? this.referenceDataObject.scope['vnfc-type'] : ""; + //replacing / with _ and removing spaces in the scopeName + if (scopeName) { + scopeName = scopeName.replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, ''); + } + console.log(this.classNm + ": resetParamsOnVnfcType: return scopeName:[" + + scopeName + "]"); return scopeName } - //used to form the structure of the reference file + decideExtension(obj) { + //marking the extension based on the device-protocol selected by the user + let extension = '.json'; + switch (obj['device-protocol']) { + case 'ANSIBLE': + case 'CHEF': + case 'CLI': + extension = '.json'; + break; + case 'NETCONF-XML': + case 'REST': + extension = '.xml'; + break; + } + return extension; + } prepareArtifactList(scopeName, extension) { + console.log(this.classNm + ": prepareArtifactList: start: scopeName:[" + + scopeName + "] extension:[" + extension + "]"); this.referenceDataObject['artifact-list'] = []; - let configTemplate - let pdTemplate - let paramValue - let vnf = this.referenceDataObject.scope['vnf-type'] - if (this.referenceDataObject.action == 'Configure' || this.referenceDataObject.action == 'ConfigModify') { - let vnfcTypeList = this.referenceDataObject.scope['vnfc-type-list']; - let pd_fileName - let config_template_fileName - - let param_fileName - if (vnfcTypeList && vnfcTypeList.length > 0) { - - - for (var x = 0; x < vnfcTypeList.length; x++) { + //preparing the artifact list array file names along with extension + let config_template_fileName = this.referenceDataObject.action + '_' + scopeName + '_' + '0.0.1V' + extension; + let pd_fileName = this.referenceDataObject.action + '_' + scopeName + '_' + '0.0.1V.yaml'; + let reference_fileName = this.referenceDataObject.action + '_' + scopeName + '_' + '0.0.1V.json'; + let configTemplate = { + 'artifact-name': 'template_' + config_template_fileName, + 'artifact-type': 'config_template' + }; + let pdTemplate = { + 'artifact-name': 'pd_' + pd_fileName, + 'artifact-type': 'parameter_definitions' + }; + if (this.referenceDataObject.action != 'ConfigScaleOut') { + this.referenceDataObject['artifact-list'].push(configTemplate, + pdTemplate + ); + } else { + let identifiers = this.referenceDataObject['template-id-list']; + if (identifiers) { + for (var x = 0; x < identifiers.length; x++) { //for replacing spaces and "/" with "_" - let type = vnfcTypeList[x].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, ''); - pd_fileName = this.referenceDataFormUtil.createArtifactName(this.referenceDataObject.action, vnf, type, '.yaml') - config_template_fileName = this.referenceDataFormUtil.createArtifactName(this.referenceDataObject.action, vnf, type, extension) - param_fileName = this.referenceDataFormUtil.createArtifactName(this.referenceDataObject.action, vnf, type, '.json') - configTemplate = this.referenceDataFormUtil.createConfigTemplate(config_template_fileName); - pdTemplate = this.referenceDataFormUtil.createPdTemplate(pd_fileName); - paramValue = this.referenceDataFormUtil.createParamValue(param_fileName); - + identifiers[x] = identifiers[x].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, ''); + pd_fileName = this.referenceDataObject.action + '_' + scopeName + '_' + '0.0.1V_' + identifiers[x] + '.yaml'; + config_template_fileName = this.referenceDataObject.action + '_' + scopeName + '_' + '0.0.1V_' + identifiers[x] + extension; + + configTemplate = { + 'artifact-name': 'template_' + config_template_fileName, + 'artifact-type': 'config_template' + }; + pdTemplate = { + 'artifact-name': 'pd_' + pd_fileName, + 'artifact-type': 'parameter_definitions' + }; this.referenceDataObject['artifact-list'].push(configTemplate, - pdTemplate, paramValue + pdTemplate ); } - } else if (scopeName) { - pd_fileName = this.referenceDataObject.action + '_' + scopeName + '_' + '0.0.1V.yaml'; - config_template_fileName = this.referenceDataObject.action + '_' + scopeName + '_' + '0.0.1V' + extension; - param_fileName = this.referenceDataObject.action + '_' + scopeName + '_' + '0.0.1V.json'; - configTemplate = this.referenceDataFormUtil.createConfigTemplate(config_template_fileName); - pdTemplate = this.referenceDataFormUtil.createPdTemplate(pd_fileName); - paramValue = this.referenceDataFormUtil.createParamValue(param_fileName); - this.referenceDataObject['artifact-list'].push(configTemplate, - pdTemplate, paramValue - ); } - } else { - - //preparing the artifact list array file names along with extension - let config_template_fileName = this.referenceDataFormUtil.createArtifactName(this.referenceDataObject.action, vnf, '', extension); - let pd_fileName = this.referenceDataFormUtil.createArtifactName(this.referenceDataObject.action, vnf, '', '.yaml'); - let reference_fileName = this.referenceDataFormUtil.createArtifactName(this.referenceDataObject.action, vnf, '', '.json'); - let param_fileName = this.referenceDataFormUtil.createArtifactName(this.referenceDataObject.action, vnf, '', '.json'); - configTemplate = this.referenceDataFormUtil.createConfigTemplate(config_template_fileName); - pdTemplate = this.referenceDataFormUtil.createPdTemplate(pd_fileName); - paramValue = this.referenceDataFormUtil.createParamValue(param_fileName); - if (this.referenceDataObject.action != 'ConfigScaleOut') { - - this.referenceDataObject['artifact-list'].push(configTemplate, - pdTemplate, paramValue - ); - - } else { - - let identifiers = this.referenceDataObject['template-id-list']; - if (identifiers) { - for (var x = 0; x < identifiers.length; x++) { - //for replacing spaces and "/" with "_" - let type = identifiers[x].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, ''); - pd_fileName = this.referenceDataFormUtil.createArtifactNameForIdentifiers(this.referenceDataObject.action, this.referenceDataObject.scope["vnf-type"], type, '.yaml'); - config_template_fileName = this.referenceDataFormUtil.createArtifactNameForIdentifiers(this.referenceDataObject.action, this.referenceDataObject.scope["vnf-type"], type, extension); - param_fileName = this.referenceDataFormUtil.createArtifactNameForIdentifiers(this.referenceDataObject.action, this.referenceDataObject.scope["vnf-type"], type, '.json'); - configTemplate = this.referenceDataFormUtil.createConfigTemplate(config_template_fileName); - pdTemplate = this.referenceDataFormUtil.createPdTemplate(pd_fileName); - paramValue = this.referenceDataFormUtil.createParamValue(param_fileName); - - this.referenceDataObject['artifact-list'].push(configTemplate, - pdTemplate, paramValue - ); - } - } - - } } } - // used to remove the added vms for actions other than configure & scaleout deleteVmsforNonActions(newObj, action) { let configureObject = (action == 'Configure'); let ConfigScaleOut = (action == 'ConfigScaleOut'); @@ -1637,78 +1663,26 @@ export class ReferenceDataformComponent implements OnInit { } return newObj } - // used to replace the data in tempall obj and form the artifact names pushOrReplaceTempData(newObj, action) { - let configTemplate - let pdTemplate - let paramValue - if (newObj.action == "Configure" || newObj.action == "ConfigModify") { - let extension = this.referenceDataFormUtil.decideExtension(this.referenceDataObject); - let pd_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + (newObj['vnfcIdentifier'] ? (newObj['vnfcIdentifier'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_') : "") + '0.0.1V.yaml'; - let config_template_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + (newObj['vnfcIdentifier'] ? (newObj['vnfcIdentifier'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_') : "") + '0.0.1V' + extension; - let param_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + (newObj['vnfcIdentifier'] ? (newObj['vnfcIdentifier'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_') : "") + '0.0.1V.json'; - configTemplate = this.referenceDataFormUtil.createConfigTemplateForPushReplaceData(config_template_fileName); - pdTemplate = this.referenceDataFormUtil.createPdTemplateForPushReplaceData(pd_fileName); - paramValue = this.referenceDataFormUtil.createParamValueForPushReplaceData(param_fileName); - let idValue = "" - if (newObj.scope['vnfc-type']) { - idValue = newObj.scope['vnfc-type'] - } else if (this.vnfcIdentifier) { - idValue = this.vnfcIdentifier + console.log(this.classNm + ": pushOrReplaceTempData: start: action:[" + + action + "]\n newObj.scope vnfc-type:[" + newObj.scope['vnfc-type'] + "]"); + if (newObj.scope['vnfc-type'] == undefined || + newObj.scope['vnfc-type'] == null || + newObj.scope['vnfc-type'].length < 1) { + console.log(this.classNm + ": pushOrReplaceTempData: scope vnfc-type" + + " is empty.\n vnfcIdentifier:[" + this.vnfcIdentifier + "]"); + if (this.vnfcIdentifier != null && this.vnfcIdentifier != undefined && + this.vnfcIdentifier.length > 0) { + newObj.scope['vnfc-type'] = this.vnfcIdentifier; } - - let arr = [configTemplate, pdTemplate, paramValue] - this.mappingEditorService.selectedObj({ - action: newObj.action, - vnf: newObj.scope['vnf-type'] ? newObj.scope['vnf-type'] : "", - vnfc: idValue, - protocol: newObj['device-protocol'] ? newObj['device-protocol'] : "", - param_artifact: paramValue['param_artifact'], - pd_artifact: pdTemplate['pd_artifact'], - template_artifact: configTemplate['template_artifact'] - }); - } else if (newObj.action == "ConfigScaleOut") { - let extension = this.referenceDataFormUtil.decideExtension(newObj); - let pd_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_0.0.1V' + '_' + (this.templateIdentifier ? (this.templateIdentifier.replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '')) : "") + ".yaml"; - let config_template_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + '0.0.1V_' + (this.templateIdentifier ? (this.templateIdentifier.replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '') : "") + extension; - let param_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + '0.0.1V_' + (this.templateIdentifier ? (this.templateIdentifier.replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '') : "") + '.json'; - configTemplate = this.referenceDataFormUtil.createConfigTemplateForPushReplaceData(config_template_fileName); - pdTemplate = this.referenceDataFormUtil.createPdTemplateForPushReplaceData(pd_fileName); - paramValue = this.referenceDataFormUtil.createParamValueForPushReplaceData(param_fileName); - let arr = [configTemplate, pdTemplate, paramValue] - this.mappingEditorService.selectedObj({ - action: newObj.action, - vnf: newObj.scope['vnf-type'] ? newObj.scope['vnf-type'] : "", - //vnfc: newObj['vnfcIdentifier'] ? newObj['vnfcIdentifier'] : "", - protocol: newObj['device-protocol'] ? newObj['device-protocol'] : "", - templateId: this.templateIdentifier, - param_artifact: paramValue['param_artifact'], - pd_artifact: pdTemplate['pd_artifact'], - template_artifact: configTemplate['template_artifact'] - }); - } - else { - let extension = this.referenceDataFormUtil.decideExtension(newObj); - let pd_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + '0.0.1V.yaml'; - let config_template_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + '0.0.1V' + extension; - let param_fileName = this.referenceDataObject.action + '_' + newObj.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, '') + '_' + '0.0.1V.json'; - configTemplate = this.referenceDataFormUtil.createConfigTemplateForPushReplaceData(config_template_fileName); - pdTemplate = this.referenceDataFormUtil.createPdTemplateForPushReplaceData(pd_fileName); - paramValue = this.referenceDataFormUtil.createParamValueForPushReplaceData(param_fileName); - let arr = [configTemplate, pdTemplate, paramValue] - this.mappingEditorService.selectedObj({ - action: newObj.action, - vnf: newObj.scope['vnf-type'] ? newObj.scope['vnf-type'] : "", - protocol: newObj['device-protocol'] ? newObj['device-protocol'] : "", - param_artifact: paramValue['param_artifact'], - pd_artifact: pdTemplate['pd_artifact'], - template_artifact: configTemplate['template_artifact'] - }); - } - + }; let actionObjIndex = this.tempAllData.findIndex(obj => { return obj['action'] == action; }); + if (newObj.action != 'HealthCheck') { + delete newObj['url']; + } + if (actionObjIndex > -1) { this.tempAllData[actionObjIndex] = newObj; this.mappingEditorService.saveLatestAction(this.tempAllData[actionObjIndex]); @@ -1721,10 +1695,8 @@ export class ReferenceDataformComponent implements OnInit { } } else { if (newObj.action != '') { - this.tempAllData.push(newObj); this.mappingEditorService.saveLatestAction(newObj); - if (newObj.action == "ConfigScaleOut") { this.mappingEditorService.saveLatestIdentifier(this.templateIdentifier); } @@ -1734,9 +1706,12 @@ export class ReferenceDataformComponent implements OnInit { } } } + } + // removes the unwanted keys added in the artifact for vnfc level actions deleteUnwantedKeys(newObj) { + console.log(this.classNm + ": deleteUnwantedKeys: start."); newObj = JSON.parse(JSON.stringify(newObj)) delete newObj['template-id'] delete newObj['vnfcIdentifier'] @@ -1746,28 +1721,25 @@ export class ReferenceDataformComponent implements OnInit { if (newObj.action != 'HealthCheck') { delete newObj['url']; } - if (newObj.action != "Configure" && newObj.action != "ConfigModify") { + if (newObj.action != "Configure" && newObj.action != "ConfigModify" && newObj.action != "DistributeTraffic") { newObj.scope['vnfc-type-list'] = []; } return newObj } addAllActionObj(newObj, scopeName) { - + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": addAllActionObj: start."); //Creating all action block to allow mulitple actions at once let allAction = { action: 'AllAction', 'action-level': 'vnf', scope: newObj.scope, - 'artifact-list': [] + 'artifact-list': [{ + 'artifact-name': 'reference_AllAction' + '_' + scopeName + '_' + '0.0.1V.json', + 'artifact-type': 'reference_template' + }] }; - let vnfType = this.referenceDataObject.scope['vnf-type'].replace(/ /g, '').replace(new RegExp('/', 'g'), '_').replace(/ /g, ''); - - allAction['artifact-list'].push({ - 'artifact-name': 'reference_AllAction' + '_' + vnfType + '_' + '0.0.1V.json', - 'artifact-type': 'reference_template' - }) - let allActionIndex = this.tempAllData.findIndex(obj => { return obj['action'] == 'AllAction'; }); @@ -1779,18 +1751,12 @@ export class ReferenceDataformComponent implements OnInit { } resetTempData() { - let methName= "resetTempData"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": start."); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": tempAllData:["+ - JSON.stringify(this.tempAllData)+"]"); - if (this.utilityService.checkNotNull(this.uploadedDataArray)) { - - if (this.utilityService.checkNotNull(this.tempAllData)) { + if (this.utilityService.getTracelvl() > 0) + console.log(this.classNm + ": resetTempData: start."); + if (this.uploadedDataArray && this.uploadedDataArray != undefined && this.uploadedDataArray.length != 0) { + if (this.tempAllData && this.tempAllData != undefined) { for (var i = 0; i < this.tempAllData.length; i++) { var result = false; - if (this.tempAllData[i].action === 'AllAction') { result = true; } @@ -1809,27 +1775,26 @@ export class ReferenceDataformComponent implements OnInit { } trackByFn(index, item) { - return index; // or item.id + return index; } + getArtifactsOpenStack() { + console.log(this.classNm + ": getArtifactsOpenStack: start: " + + "tempAllData length=" + this.tempAllData.length); var array = [] var vnfcFunctionCodeArrayList = []; var vnfcSetArray = []; - // var vnfcSet = new Set(); for (var i = 0; i < this.tempAllData.length; i++) { if (!this.checkIfelementExistsInArray(this.tempAllData[i].action, this.actions) && (this.tempAllData[i].action != 'AllAction')) { var vnfcFunctionCodeArray = this.tempAllData[i]["vnfc-function-code-list"] - // vnfcSet.add("Actions") - /* for (var j = 0; j < vnfcFunctionCodeArray.length; j++) { - vnfcSet.add(vnfcFunctionCodeArray[j]) - }*/ vnfcFunctionCodeArrayList.push([this.tempAllData[i].action].concat(this.tempAllData[i]["vnfc-function-code-list"])) } if (this.tempAllData[i].action === 'OpenStack Actions') { vnfcSetArray = this.tempAllData[i]['firstRowVmSpreadSheet'] } } - + console.log(this.classNm + ": getArtifactsOpenStack: vnfcSetArray length=" + + vnfcSetArray.length); if (vnfcSetArray) { let vnfcSetArrayLen = vnfcSetArray.length; @@ -1852,6 +1817,54 @@ export class ReferenceDataformComponent implements OnInit { } } + /** + * Handles the display of VM block based on the action change + */ + handleVMBlockDisplay() { + switch (this.referenceDataObject.action) { + case this.actionList.ConfigScaleOut: + case this.actionList.Configure: + case undefined: + case '': + this.displayVMBlock = true; + break; + default: + this.displayVMBlock = false; + } + } + + //.. check VNFC Type equality in Upper Selection vs entered in Sample field + checkVnfcTypeEqual(vnfctp: string) { + var methName = "checkVnfcTypeEqual"; + console.log(this.classNm + ": " + methName + ": vnfctp:[" + vnfctp + "]"); + console.log(this.classNm + ": " + methName + ": vnfcIdentifier:[" + + this.vnfcIdentifier + "]"); + console.log(this.classNm + ": " + methName + ": Sample[vnfc-type]:[" + + this.Sample['vnfc-type'] + "]"); + if (vnfctp != null && vnfctp.length > 0) { + if (this.vnfcIdentifier != null && this.vnfcIdentifier.length > 0) { + console.log( + this.classNm + ": " + methName + ": compare non empty VNFC Types..."); + if (vnfctp != this.vnfcIdentifier) { + console.log(this.classNm + ": " + methName + ": Non-match WARNING !"); + //.. display in pop-up + this.nService.warn('WARNING', + "The specified VNFC Types don't match." + + " Can cause discrepancy in the artifacts.", this.options); + } else { + console.log(this.classNm + ": checkVnfcTypeEqual: VNFC Types're equal."); + }; + }; + }; + }; + + //.. populating VNFC Type in Sample fields + setVnfcTypeInSample(vnfctp: string) { + // if( this.utilityService.getTracelvl() > 0 ) + console.log(this.classNm + ": setVnfcTypeInSample: vnfctp:[" + vnfctp + "]"); + this.Sample['vnfc-type'] = vnfctp; + }; + // Common method to show validation errors private showValidationErrors(referenceDataObject) { if (this.referenceDataObject.action === '') { @@ -1866,16 +1879,10 @@ export class ReferenceDataformComponent implements OnInit { if (referenceDataObject.action === 'ConfigScaleOut' && !this.templateIdentifier) { this.nService.error('Error', 'Select a valid Template Identifier'); } - - // if ((referenceDataObject.action === 'Configure' || referenceDataObject.action === 'ConfigModify') && !this.vnfcIdentifier && this.displayVnfc != 'false') { - // this.nService.error('Error', 'Select a valid Vnfc Type'); - // return; - // } } resetArtifactList(obj) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": resetArtifactList: start..."); + console.log(this.classNm + ": resetArtifactList: start..."); let vnfcTypeList = obj.scope['vnfc-type-list']; let vnf = this.referenceDataObject.scope['vnf-type'] let pd_fileName @@ -1913,86 +1920,4 @@ export class ReferenceDataformComponent implements OnInit { ); } } - - /** - * Handles the display of VM block based on the action change - */ - handleVMBlockDisplay() { - switch (this.referenceDataObject.action) { - case this.actionList.ConfigScaleOut: - case this.actionList.Configure: - case undefined: - case '': - this.displayVMBlock = true; - break; - default: - this.displayVMBlock = false; - } - } - - //.. check VNFC Type equality in Upper Selection vs entered in Sample field - checkVnfcTypeEqual( vnfctp: string ) { - var methName= "checkVnfcTypeEqual"; - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": "+methName+": vnfctp:["+vnfctp+"]"); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": vnfcIdentifier:["+ - this.vnfcIdentifier+"]"); - if( this.utilityService.getTracelvl() > 1 ) - console.log( this.classNm+": "+methName+": Sample[vnfc-type]:["+ - this.Sample['vnfc-type']+"]"); - if( vnfctp != null && vnfctp.length > 0 ) { - if( this.vnfcIdentifier != null && this.vnfcIdentifier.length > 0 ) { - console.log( - this.classNm+": "+methName+": compare non empty VNFC Types..."); - if( vnfctp != this.vnfcIdentifier ) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": "+methName+": Non-match WARNING !"); - //.. display in pop-up - this.nService.warn( 'WARNING', - "The specified VNFC Types don't match."+ - " Can cause discrepancy in the artifacts.", this.options ); - } else { - if( this.utilityService.getTracelvl() > 0 ) - console.log(this.classNm+": checkVnfcTypeEqual: VNFC Types're equal."); - }; - }; - }; - }; - - //.. populating VNFC Type in Sample fields - setVnfcTypeInSample( vnfctp: string ) { - //clear vnfc information samples - this.clearVnfcData(); - - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": setVnfcTypeInSample: vnfctp:["+vnfctp+"]"); - this.Sample['vnfc-type']= vnfctp; - }; - - /** - * Procesess reference data after retrieval from appc or after a reference file has been uploaded from PC. - */ - processReferenceDataAfterRetrieval() { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": processReferenceDataAfterRetr: start..."); - if (this.referenceDataObject.action === 'OpenStack Actions') { - this.deviceProtocols = ['', 'OpenStack']; - this.buildDesignComponent.tabs = this.referencDataTab; - } else { - this.buildDesignComponent.tabs = this.allTabs; - } - if( this.utilityService.getTracelvl() > 1 ) - console.log( this.classNm+": processReferenceDataAfterRetr: done."); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": vnfcIdentifier:["+this.vnfcIdentifier+"]"); - if( this.utilityService.getTracelvl() > 1 ) - console.log( this.classNm+": oldVnfcIdentifier:["+ - this.oldVnfcIdentifier+"]"); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.classNm+": refDataObj.scope.vnfc-type:["+ - this.referenceDataObject.scope['vnfc-type']+"]"); - this.setVnfcTypeInSample( this.vnfcIdentifier ); - } - } diff --git a/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.util.ts b/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.util.ts index bb564b7..00e014c 100644 --- a/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.util.ts +++ b/src/app/vnfs/build-artifacts/reference-dataform/reference-dataform.util.ts @@ -26,7 +26,7 @@ import {Observable} from 'rxjs'; import {UtilityService} from '../../../shared/services/utilityService/utility.service'; import { environment } from '../../../../environments/environment'; import { HttpUtilService } from '../../../shared/services/httpUtil/http-util.service'; -import {APIService} from "../../../shared/services/cdt.apicall"; +//import {APIService} from "../../../shared/services/cdt.apicall"; @Injectable() export class ReferenceDataFormUtil { @@ -35,7 +35,9 @@ export class ReferenceDataFormUtil { private failureMessage = 'There is no artifact saved in APPC for the selected action!'; private response: Observable; - constructor(private notificationService: NotificationsService, private utilityService:UtilityService, private apiService: APIService) { + constructor( + private notificationService: NotificationsService, private utilityService:UtilityService, private httpUtils: HttpUtilService + ) { } checkResult(result: any) { @@ -152,10 +154,13 @@ export class ReferenceDataFormUtil { return paramValue; } - handleApiData(data,artifactType) + handleApiData(payloadData,artifactType) { - this.response = this.apiService.callGetArtifactsApi(data); - this.response.subscribe(response => { + this.response = + this.httpUtils.post({ + url: environment.getDesigns, + data: payloadData }); + this.response.subscribe( response => { this.utilityService.processApiSubscribe(response, this.utilityService.putAction, artifactType) }, error => this.utilityService.processApiError()); diff --git a/src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.html b/src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.html index dc5e812..26cbf27 100644 --- a/src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.html +++ b/src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.html @@ -69,12 +69,13 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
- - +
+
- +
@@ -107,24 +108,14 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.

- - - +
-
- \ No newline at end of file + diff --git a/src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.ts b/src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.ts index a4e0539..40a5291 100644 --- a/src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.ts +++ b/src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.ts @@ -44,7 +44,6 @@ import { NgProgress } from 'ngx-progressbar'; import * as XLSX from 'xlsx'; import { NgxSpinnerService } from 'ngx-spinner'; import {UtilityService} from '../../../../shared/services/utilityService/utility.service'; -import { APIService } from "../../../../shared/services/cdt.apicall"; declare var $: any; @@ -102,13 +101,14 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { @ViewChild('myInputParam') myInputParam: any; @ViewChild(ModalComponent) modalComponent: ModalComponent; @ContentChildren(Tab) tabs: QueryList; - public subscription: any; + public subscription: Subscription; public item: any = {}; vnfType: any = ''; vnfcType: any = ''; protocol: any = ''; refObj: any; - public paramsContent:any; + public paramsContent = localStorage['paramsContent']; + nameValueSubscription: Subscription; constructor( private buildDesignComponent: BuildDesignComponent, @@ -122,9 +122,7 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { private nService: NotificationsService, private ngProgress: NgProgress, private spinner: NgxSpinnerService, - private apiService:APIService, - private utilityService: UtilityService - + private utilityService: UtilityService, ) { this.artifactRequest.action = ''; this.artifactRequest.version = ''; @@ -134,27 +132,29 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { ngOnInit() { var refObj = this.refObj = this.prepareFileName(); if (refObj && refObj != undefined) { - try{ - this.paramsContent=JSON.stringify(JSON.parse(localStorage['paramsContent'])) - } - catch(e) - { - console.log("error parsing param values"); - } if (this.paramsContent && this.paramsContent != undefined && this.paramsContent !== '{}') { this.artifactRequest.paramsContent = this.formatNameValuePairs(this.paramsContent); - + // this.artifactRequest.paramsContent = this.paramsContent; + } else { this.artifactRequest.paramsContent = '{}'; } + // refObj = refObj[refObj.length - 1]; this.item = refObj; - this.vnfType = this.item.vnf; - this.vnfcType = this.item.vnfc; - this.protocol = this.item.protocol; + this.vnfType = this.item.scope['vnf-type']; + this.vnfcType = this.item.scope['vnfc-type']; + this.protocol = this.item['device-protocol']; this.action = this.item.action; var artifactList = this.item['artifact-list']; + for (var i = 0; i < artifactList.length; i++) { + var artifactName = artifactList[i]['artifact-name']; + var array = artifactName.split('_'); + if (array[0].toUpperCase() === 'TEMPLATE') { + this.artifactName = artifactName; + } + } } else { this.item = { @@ -170,9 +170,18 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { 'scopeType': '' }; } + this.initialAction = this.item.action; + this.subscription = this.activeRoutes.url.subscribe(UrlSegment => { + this.actionType = UrlSegment[0].path; + }); + + if (this.actionType === 'myTemplates') { + this.mappingEditorService.fromScreen = 'MappingScreen'; + } this.mappingEditorService.paramData = []; this.identifier = this.mappingEditorService.identifier; + } //========================== End of ngOnInit() Method============================================ @@ -181,20 +190,25 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { } //========================== End of browseOption() Method============================================ + ngOnDestroy() { this.prepareFileName(); if( this.subscription ) { this.subscription.unsubscribe(); } - // if( this.nameValueSubscription ) { this.nameValueSubscription.unsubscribe(); } + if( this.nameValueSubscription ) { this.nameValueSubscription.unsubscribe(); } } //========================== End of ngOnDestroy() Method============================================ ngAfterViewInit() { - this.configMappingEditorContent = this.mappingEditorService.getTemplateMappingDataFromStore(); - this.fileType = sessionStorage.getItem('fileType'); - if (this.configMappingEditorContent) - this.mappingEditorService.initialise(this.mappingComponent.templateeditor.getEditor(), this.configMappingEditorContent); - + if (this.mappingEditorService.fromScreen === 'MappingScreen') { + this.configMappingEditorContent = this.mappingEditorService.getTemplateMappingDataFromStore(); + this.fileType = sessionStorage.getItem('fileType'); + if (this.configMappingEditorContent) + this.mappingEditorService.initialise(this.mappingComponent.templateeditor.getEditor(), this.configMappingEditorContent, this.modal); + } if (this.refObj) { + + this.artifactRequest.action = this.item.action; + this.artifactRequest.vnfType = this.vnfType; if (this.vnfcType && this.vnfcType.length != 0) { this.scopeName = this.vnfcType; } @@ -220,11 +234,13 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { // Create the file reader let reader = new FileReader(); this.readFile(input.files[0], reader, (result) => { - var jsonObject = JSON.parse(result); - this.artifactRequest.paramsContent = JSON.stringify(jsonObject, null, 1); - this.notificationService.notifySuccessMessage('Configuration Template file successfully uploaded..'); - this.mappingEditorService.setParamContent(this.artifactRequest.paramsContent); - localStorage['paramsContent'] = this.artifactRequest.paramsContent; + if ('Mapping Data' === this.selectedUploadType) { + var jsonObject = JSON.parse(result); + this.artifactRequest.paramsContent = JSON.stringify(jsonObject, null, 1); + this.notificationService.notifySuccessMessage('Configuration Template file successfully uploaded..'); + this.mappingEditorService.setParamContent(this.artifactRequest.paramsContent); + localStorage['paramsContent'] = this.artifactRequest.paramsContent; + } this.enableMerge = true; this.initialData = result; setTimeout(() => { @@ -262,6 +278,7 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { // callback with the results callback(reader.result); }; + this.notificationService.notifySuccessMessage('Uploading File ' + file.name + ':' + file.type + ':' + file.size); // Read the file reader.readAsText(file, 'UTF-8'); } @@ -273,23 +290,44 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { } //========================== End of onParamChanges() Method============================================ + + updateFileName(action: any, scopeName: any, versionNo: any) { + let fileName = 'param_' + action + '_' + scopeName + '_' + versionNo + 'V.json'; + this.downloadedFileName = fileName; + return fileName; + } + + //========================== End of updateFileName() Method============================================ + updateFileNameForConfigScaleOut(action: any, scopeName: any, versionNo: any, id: any) { + let fileName = 'param_' + action + '_' + scopeName + '_' + versionNo + 'V_' + id + '.json'; + this.downloadedFileName = fileName; + return fileName; + } + //========================== End of updateFileNameForConfigScaleOut() Method============================================ prepareFileName(): any { - let fileNameObject: any = this.mappingEditorService.newObject; + let fileNameObject: any = this.mappingEditorService.latestAction; return fileNameObject; } //========================== End of prepareFileName() Method============================================ + retrieveNameValueFromAppc() { let refObj = this.refObj; if (refObj && refObj != undefined) { this.enableMerge = true; var scopeName = this.scopeName.replace(/ /g, '').replace(new RegExp('/', "g"), '_').replace(/ /g, ''); let fileName = ''; - fileName=refObj["param_artifact"] + let id = this.mappingEditorService.identifier; + if (id) fileName = this.updateFileNameForConfigScaleOut(this.item.action, scopeName, this.versionNo, id); + else fileName = this.updateFileName(this.item.action, scopeName, this.versionNo); + let input=this.utilityService.createPayloadForRetrieve(false, this.item.action, this.vnfType, fileName); let artifactContent: any; this.ngProgress.start(); - this.apiService.callGetArtifactsApi(input).subscribe(resp => { + this.nameValueSubscription = this.httpUtil.post({ + url: environment.getDesigns, + data: input + }).subscribe(resp => { if (resp.output.status.code === '400' && resp.output.status.message === 'success') { this.nService.success('Success', 'Name/value pairs retrieved successfully from APPC'); this.enableMerge = true; @@ -324,6 +362,7 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { } //========================== End of retrieveNameValueFromAppc() Method============================================ + formatNameValuePairs(namevaluePairs: string) { var string = namevaluePairs.substring(1, namevaluePairs.length - 1); var stringArr = string.split(','); @@ -417,7 +456,7 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { 'ruleTypeValues': arr2item.ruleTypeValues }; pdDataArrayForSession.splice(i, 1, json); - + } }); @@ -432,8 +471,9 @@ export class GoldenConfigurationMappingComponent implements OnInit, OnDestroy { } } catch (error) { + console.log('Error occured in syncing param names' + JSON.stringify(error)); this.nService.error('Error', 'Error synchronising with name values. Please check the format of json uploaded/ retrieved'); } } -} \ No newline at end of file +} diff --git a/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.css b/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.css index 646d3ce..c8100e3 100644 --- a/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.css +++ b/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.css @@ -32,16 +32,4 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. .options-menu { padding: 3px 20px; -} -.ace_cursor{ - background-color: greenyellow; - -} -.ace-monokai{ - color: greenyellow; - -} -.ace_scroller{ - color: white; - background-color: wheat; } \ No newline at end of file diff --git a/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.html b/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.html index 67bce4d..105f0ec 100644 --- a/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.html +++ b/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.html @@ -42,17 +42,17 @@ limitations under the License.
- - +
- +
+
@@ -62,8 +62,7 @@ limitations under the License.
-
@@ -71,7 +70,7 @@ limitations under the License.
- @@ -82,15 +81,17 @@ limitations under the License.
- - +
- + + - - + + + +
@@ -98,16 +99,14 @@ limitations under the License.
Required Field - Name can't start or end with space(s)
- - +
diff --git a/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.ts b/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.ts index 64777ea..8afa5bc 100644 --- a/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.ts +++ b/src/app/vnfs/build-artifacts/template-holder/template-configuration/template-configuration.component.ts @@ -3,6 +3,8 @@ =================================================================== Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. =================================================================== +Copyright (C) 2018 IBM. +=================================================================== Unless otherwise specified, all software contained herein is licensed under the Apache License, Version 2.0 (the License); @@ -17,11 +19,11 @@ 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. -ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ import { Component, Input, OnInit, ViewChild } from '@angular/core'; +import { Subscription } from 'rxjs/Subscription'; import { HttpUtilService } from '../../../../shared/services/httpUtil/http-util.service'; import { MappingEditorService } from '../../../../shared/services/mapping-editor.service'; import { ArtifactRequest } from '../../../../shared/models/index'; @@ -36,31 +38,31 @@ import { BuildDesignComponent } from '../../build-artifacts.component'; import { environment } from '../../../../../environments/environment'; import { ModalComponent } from 'ng2-bs3-modal/ng2-bs3-modal'; import { NgProgress } from 'ngx-progressbar'; +import { NgxSpinnerService } from 'ngx-spinner'; import { UtilityService } from '../../../../shared/services/utilityService/utility.service'; -import { APIService } from "../../../../shared/services/cdt.apicall"; -import { ProcOnSrvSideSvc } from "../../../../shared/services/procOnSrvSide.service"; declare var $: any - +const PARAM_DATA:string="param_data"; +const TEMPLATE_DATA:string="template_data"; @Component({ selector: 'app-golden-configuration', templateUrl: './template-configuration.component.html', styleUrls: ['./template-configuration.component.css'] }) export class GoldenConfigurationComponent implements OnInit { - clName= "TemplateConfComp"; + clName= "TemplateConfigCompon"; @ViewChild('templateeditor') templateeditor; @Input() configMappingEditorContent: string; @Input() isMappingComp: boolean; @ViewChild('myInput') myInputVariable: any; - // @ViewChild(ModalComponent) modalComponent: ModalComponent; @ViewChild('myModal') modal: ModalComponent; aceText: string = "" fileName: string = "" showTemplateVersionDiv: any; downloadedTemplateFileName: any; downloadedParamFileName: any; - templateVersionNo: any = require('../../../../../cdt.application.properties.json').versionNoForApiCall; + templateVersionNo: any = '0.0.1'; saveToGuiCacheFlag = 'false'; initialAction: any; public referenceData: Array = []; public scopeName: any; - public subscription: any; + public subscription: Subscription; + public templateSubscription : Subscription; public item: any = {}; public goldenActions: Array = []; public refNameObj = {}; @@ -76,6 +78,7 @@ export class GoldenConfigurationComponent implements OnInit { enableBrowse: boolean = true; enableMerge: boolean = false; uploadValidationSuccess: boolean = false; + fileExtension: any = "xml"; apiToken = localStorage['apiToken']; public appDataObject: any; public downloadDataObject: any; @@ -89,10 +92,11 @@ export class GoldenConfigurationComponent implements OnInit { { action: "GetRunningConfig", value: "GetRunningConfig" }, { action: "HealthCheck", value: "HealthCheck" }, { action: "StartApplication", value: "StartApplication" }, - { action: "StopApplication", value: "StopApplication" } + { action: "StopApplication", value: "StopApplication" }, + { action: "DistributeTraffic", value: "DistributeTraffic" } ]; options = { - timeOut: 4500, + timeOut: 1000, showProgressBar: true, pauseOnHover: true, clickToClose: true, @@ -100,30 +104,25 @@ export class GoldenConfigurationComponent implements OnInit { } public replaceWord; public enableDownloadButtons: boolean = false; - + constructor( - private buildDesignComponent: BuildDesignComponent, - private apiService: APIService, - private utilityService: UtilityService, - private paramShareService: ParamShareService, - private dialogService: DialogService, - private notificationService: NotificationService, - private httpUtil: HttpUtilService, - private mappingEditorService: MappingEditorService, - private activeRoutes: ActivatedRoute, - private router: Router, - private nService: NotificationsService, - private procOnSrvSideSvc: ProcOnSrvSideSvc, - private ngProgress: NgProgress) - { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": new: start."); + private buildDesignComponent: BuildDesignComponent, + private paramShareService: ParamShareService, + private dialogService: DialogService, + private notificationService: NotificationService, + private httpUtil: HttpUtilService, + private mappingEditorService: MappingEditorService, + private activeRoutes: ActivatedRoute, + private router: Router, + private nService: NotificationsService, + private ngProgress: NgProgress, + private spinner: NgxSpinnerService, + private utilityService: UtilityService) { this.artifactRequest.action = ''; this.artifactRequest.version = ''; this.artifactRequest.paramsContent = '{}'; this.artifactRequest.paramKeysContent = ''; } - public templateEditor: any; public fileType: any = ''; public actionType: any; @@ -149,33 +148,32 @@ export class GoldenConfigurationComponent implements OnInit { editor: any; editorContent: any; tempName: any; - paramArtifactName: any; enableValidateTemplate: boolean = false;; public selectedUploadType: string = this.uploadTypes[0].value; - checkSpace: boolean = true; - + identifier: any; public tempRetrievalResponse: any; public mergeStatus: boolean = false; - //==================================================== + + //======================================Start of ngOnInit() Method============================================ ngOnInit() { var methName= "ngOnInit"; if( this.utilityService.getTracelvl() > 0 ) console.log( this.clName+": "+methName+": start."); var refObj = this.refObj = this.prepareFileName(); - // console.log("Ref object: " + JSON.stringify(refObj)) + if( this.utilityService.getTracelvl() > 0 ) + console.log( this.clName+": "+methName+ + ": refObj:["+JSON.stringify(refObj)+"]"); if (refObj && refObj != undefined) { this.item = refObj; - this.vnfType = this.item.vnf; - this.vnfcType = this.item.vnfc; - this.protocol = this.item.protocol; + this.vnfType = this.item.scope["vnf-type"]; + this.vnfcType = this.item.scope["vnfc-type"]; + this.protocol = this.item['device-protocol']; this.action = this.item.action; if( this.utilityService.getTracelvl() > 0 ) console.log( this.clName+": "+methName+": vnfType:["+this.vnfType+ "] vnfcType:["+this.vnfcType+"] protocol:["+this.protocol+"] action:["+ this.action+"]"); - this.artifactName = this.item["template_artifact"] - this.paramArtifactName = this.item["param_artifact"] this.artifactRequest.action = this.item.action; this.artifactRequest.vnfType = this.vnfType; if (this.vnfcType != undefined && this.vnfcType.length != 0) { @@ -186,21 +184,17 @@ export class GoldenConfigurationComponent implements OnInit { } } else { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": refObj is not defined."); this.item = { "action": "", "scope": { "vnf-type": "", "vnfc-type": "" }, "vm": [], "protocol": "", "download-dg-reference": "", "user-name": "", "port-number": "", "artifact-list": [], "deviceTemplate": "", "scopeType": "" }; } this.initialAction = this.item.action; - this.activeRoutes.url.subscribe(UrlSegment => { + this.subscription = this.activeRoutes.url.subscribe(UrlSegment => { this.actionType = UrlSegment[0].path }) this.mappingEditorService.fromScreen = 'MappingScreen'; - + this.identifier = this.mappingEditorService.identifier; } //========================== End of ngOnInit() Method============================================ ngOnDestroy() { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": ngOnDestroy: start."); if (this.refObj && this.refObj != undefined) { if (this.configMappingEditorContent && this.configMappingEditorContent != undefined) { this.saveTemplate(); @@ -210,14 +204,12 @@ export class GoldenConfigurationComponent implements OnInit { this.mappingEditorService.changeNavDownloadData(this.downloadDataObject); } } - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": ngOnDestroy: finish."); + + if(this.subscription) { this.subscription.unsubscribe(); } + if(this.templateSubscription) { this.templateSubscription.unsubscribe(); } } //========================== End of ngOnDestroy() Method============================================ ngAfterViewInit() { - var methName= "ngAfterViewInit"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": start."); if (this.mappingEditorService.latestAction) { this.refNameObj = this.mappingEditorService.latestAction; if (this.vnfcType !== 'null') { @@ -226,36 +218,47 @@ export class GoldenConfigurationComponent implements OnInit { else { this.type = this.vnfType; } + for (let i = 0; i < this.refNameObj['artifact-list'].length; i++) { + let artifactList = this.refNameObj['artifact-list']; + if (artifactList[i]['artifact-type'] === 'config_template') { + var artifactName = artifactList[i]['artifact-name']; + var artifactNameWithoutExtension = ''; + if (artifactName) { + artifactNameWithoutExtension = artifactName.substring(0, artifactName.lastIndexOf(".")); + } + if(this.mappingEditorService.identifier) { + if(artifactNameWithoutExtension.endsWith(this.mappingEditorService.identifier)) { + this.artifactName = artifactName; + } + } + else { + this.artifactName = artifactName; + } + + } + } } let self = this; this.templateEditor = self.templateeditor.getEditor(); - this.templateeditor.getEditor().commands.addCommand({ - name: 'annotateCommand', - bindKey: { win: 'ctrl-z', mac: 'Command-z' }, - exec: (editor: any) => { - this.handleUndo(this.modal); - } - }); this.templateeditor.getEditor().commands.addCommand({ name: 'annotateCommandAlternate', bindKey: { win: 'CTRL-4', mac: 'Command-4' }, exec: (editor: any) => { - this.checkNameEntered = true; - this.checkSpace = true; this.handleAnnotation(this.modal); } }); + this.templateeditor.getEditor().$enableBlockSelect = false; + this.templateeditor.getEditor().$enableMultiselect = false; if (this.mappingEditorService.fromScreen === 'MappingScreen') { this.configMappingEditorContent = this.mappingEditorService.getTemplateMappingDataFromStore(); this.fileType = sessionStorage.getItem('fileType'); } if (this.configMappingEditorContent) { this.artifactRequest.templateContent = this.configMappingEditorContent; - this.mappingEditorService.initialise(this.templateeditor.getEditor(), this.artifactRequest.templateContent); + this.mappingEditorService.initialise(this.templateeditor.getEditor(), this.artifactRequest.templateContent, this.modal); } if (this.refObj) { - if (this.mappingEditorService.getTemplateMappingDataFromStore() && - this.mappingEditorService.getTemplateMappingDataFromStore() != undefined) { + if (this.mappingEditorService.getTemplateMappingDataFromStore() && this.mappingEditorService.getTemplateMappingDataFromStore() != undefined) { this.configMappingEditorContent = this.mappingEditorService.getTemplateMappingDataFromStore(); } else { @@ -265,8 +268,7 @@ export class GoldenConfigurationComponent implements OnInit { else { this.Actions = []; this.enableBrowse = false; - this.nService.error("Error", - "Please enter Action and VNF type in Reference Data screen", this.options); + this.nService.error("Error", "Please enter Action and VNF type in Reference Data screen"); } } @@ -275,58 +277,74 @@ export class GoldenConfigurationComponent implements OnInit { $("#inputFile").trigger('click'); } //========================== End of browseOption() Method============================================ + //save to GUI public saveTemplate() { - var methName= "saveTemplate"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": start."); + this.saveToGuiCacheFlag = 'true'; this.mappingEditorService.paramData = []; if (this.configMappingEditorContent) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": do refreshEditor ..."); + this.initialData = this.configMappingEditorContent; this.mappingEditorService.refreshEditor(); let paramArr: any = [] if (this.mappingEditorService.paramData && this.mappingEditorService.paramData != undefined) { if (this.mappingEditorService.paramData.length === 0 && this.mappingEditorService.hasErrorCode === true) { - this.nService.error("Error", 'Special characters error', this.options); + this.nService.error("Error", 'Special characters error', 'Error') return; } else { this.showError = false; } } - this.mappingEditorService.setTemplateMappingDataFromStore(this.configMappingEditorContent); + this.showTemplateVersionDiv = true; + + if (this.mappingEditorService.fromScreen === 'MappingScreen') { + this.mappingEditorService.setTemplateMappingDataFromStore(this.configMappingEditorContent); + } + if (this.fileType === 'text/xml') { + sessionStorage.setItem('fileType', 'text/xml'); + } + if (this.fileType === '') { + sessionStorage.setItem('fileType', ''); + } } } //========================== End of saveTemplate() Method============================================ retrieveTemplateFromAppc() { - var methName= "retrieveTemplateFromAppc"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": start ..."); let refObj = this.refObj; if (refObj && refObj != undefined) { + let fileName = this.artifactName; let input = this.utilityService.createPayloadForRetrieve(false, this.item.action, this.vnfType, fileName); - // console.log("Retrieve artifact payload=="+ payload); let artifactContent: any; this.ngProgress.start(); - this.apiService.callGetArtifactsApi(input).subscribe(resp => { + this.templateSubscription = this.httpUtil.post({ + url: environment.getDesigns, + data: input + }).subscribe(resp => { if (resp.output.status.code === '400' && resp.output.status.message === "success") { - this.nService.success("Success","Template retrieved successfully from APPC", this.options); + this.nService.success("Success", "Template retrieved successfully from APPC"); this.tempRetrievalResponse = resp; let result = JSON.parse(resp.output.data.block).artifactInfo[0]; result = result['artifact-content']; - this.configMappingEditorContent = result - this.mappingEditorService.initialise(this.templateeditor.getEditor(), this.artifactRequest.templateContent); + if ('Generated Template' === this.selectedUploadType) { + this.configMappingEditorContent = result + this.artifactRequest.templateContent = this.configMappingEditorContent; + this.notificationService.notifySuccessMessage('Configuration Template file successfully uploaded..'); + if (this.artifactRequest.templateContent) { + this.mappingEditorService.initialise(this.templateeditor.getEditor(), this.artifactRequest.templateContent, this.modal); + } + } this.tempretrieveFlag = true; this.fileNameForTempSave = fileName; + this.enableDownloadButtons = true; + this.initialData = result; this.saveTemplate(); } else { - this.nService.info("Information","There is no template saved in APPC for the selected action!", this.options); + this.nService.info("Information", "There is no template saved in APPC for the selected action!"); } this.ngProgress.done(); }, - error => this.nService.error("Error", "Error in connecting to APPC Server", this.options)); + error => this.nService.error("Error", "Error in connecting to APPC Server")); setTimeout(() => { this.ngProgress.done(); }, 3500); @@ -334,46 +352,41 @@ export class GoldenConfigurationComponent implements OnInit { } //========================== End of retrieveTemplateFromAppc() Method============================================ prepareAppData() { - var methName= "prepareAppData"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": start."); let refObj = this.refObj; if (refObj && refObj != undefined) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": parse locStor.paramsContent"); let paramsKeyValueFromEditor: JSON; try { paramsKeyValueFromEditor = JSON.parse(localStorage["paramsContent"]); } catch (error) { - console.log(methName+": Could not parse name value pairs:" + error); + console.log("Could not parse name value pairs==" + error); } if (paramsKeyValueFromEditor) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+ - ": have paramsKeyValueFromEditor"); + this.showTemplateVersionDiv = true; let action = this.item.action; - var scopeName = - this.scopeName.replace(/ /g, '').replace(new RegExp('/', "g"), '_').replace(/ /g, ''); + var scopeName = this.scopeName.replace(/ /g, '').replace(new RegExp('/', "g"), '_').replace(/ /g, ''); var fileName = ''; - fileName = this.paramArtifactName; + let id = this.mappingEditorService.identifier; + if (id) fileName = this.updateFileNameForConfigScaleOut(this.item.action, scopeName, this.templateVersionNo, id); + else fileName = this.updateParamFileName(this.item.action, scopeName, this.templateVersionNo); + + let vnfType = this.vnfType; let Json = [paramsKeyValueFromEditor]; let slashedPayload = this.appendSlashes(JSON.stringify(Json)); - let data = - this.utilityService.createPayLoadForSave("param_data", this.vnfType, action, fileName, this.templateVersionNo, slashedPayload); + let data = this.utilityService.createPayLoadForSave(PARAM_DATA, this.vnfType, action, fileName, this.templateVersionNo, slashedPayload); this.appDataObject.template.nameValueData = data; } if (this.configMappingEditorContent) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+ - ": have configMappingEditorContent"); let actualContent = this.configMappingEditorContent; this.mappingEditorService.generateTemplate(this.templateEditor); + this.showTemplateVersionDiv = true; let action = this.item.action; let versionandFileType: any; if (this.fileType === "text/xml") { + versionandFileType = this.templateVersionNo + 'V.xml' } else { + versionandFileType = this.templateVersionNo + 'V.json' } let fileName: any; @@ -384,30 +397,15 @@ export class GoldenConfigurationComponent implements OnInit { fileName = this.artifactName; } let vnfType = this.vnfType; - - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+ - ": start replace: content length="+ - this.configMappingEditorContent.length ); - var replContent= - this.configMappingEditorContent.replace(/\(([^()]|(R))*\)=\(/g, '').replace(/\)}/g, '}'); - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+" replace done"); - - let data = this.utilityService.createPayLoadForSave("template_data", this.vnfType, action, fileName, this.templateVersionNo, replContent ); - + let data = this.utilityService.createPayLoadForSave(TEMPLATE_DATA, this.vnfType, action, fileName, this.templateVersionNo, this.configMappingEditorContent.replace(/\(([^()]|(R))*\)=\(/g, '').replace(/\)}/g, '}')); this.appDataObject.template.templateData = data; - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": initialise editor ..."); - this.mappingEditorService.initialise(this.templateeditor.getEditor(), actualContent); + this.mappingEditorService.initialise(this.templateeditor.getEditor(), actualContent, this.modal); } - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": "+methName+": finish."); } } //========================== End of prepareAppData() Method============================================ prepareFileName(): any { - let fileNameObject: any = this.mappingEditorService.newObject; + let fileNameObject: any = this.mappingEditorService.latestAction; this.appDataObject = this.mappingEditorService.appDataObject; this.downloadDataObject = this.mappingEditorService.downloadDataObject; this.referenceData = fileNameObject; @@ -428,29 +426,42 @@ export class GoldenConfigurationComponent implements OnInit { var blob = new Blob([theJSON], { type: "text/json" }); + this.showTemplateVersionDiv = true; let fileName: any; var scopeName = this.scopeName.replace(/ /g, '').replace(new RegExp('/', "g"), '_').replace(/ /g, ''); - fileName = this.paramArtifactName; + let id = this.mappingEditorService.identifier; + if (id) fileName = this.updateFileNameForConfigScaleOut(this.item.action, scopeName, this.templateVersionNo, id); + else fileName = this.updateParamFileName(this.item.action, scopeName, this.templateVersionNo); + this.downloadDataObject.template.nameValueData = theJSON; this.downloadDataObject.template.nameValueFileName = fileName; } else { - this.nService.error("Error", "Please enter Action and VNF type in Reference Data screen", this.options); + this.nService.error("Error", "Please enter Action and VNF type in Reference Data screen"); } } //========================== End of onDownloadParameter() Method============================================ + updateParamFileName(action: any, scopeName: any, versionNo: any) { + let fileName = 'param_' + action + '_' + scopeName + '_' + versionNo + 'V.json'; + this.downloadedParamFileName = fileName; + return fileName; + } + //========================== End of updateParamFileName() Method============================================ + updateFileNameForConfigScaleOut(action: any, scopeName: any, versionNo: any, id: any) { + let fileName = 'param_' + action + '_' + scopeName + '_' + versionNo + 'V_' + id + '.json'; + this.downloadedParamFileName = fileName; + return fileName; + } + //========================== End of updateFileNameForConfigScaleOut() Method============================================ public onDownloadTemplate(artifact: string) { - var methName= "onDownloadTemplate"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": start: artifact:["+artifact+"] fileType:["+ - this.fileType+"]"); let actualContent = this.configMappingEditorContent; var textToSaveAsBlob: any; var config_template_fileName: any let refObj = this.refObj; let versionandFileType: string; if (artifact == 'Template' && this.artifactRequest && this.configMappingEditorContent && refObj) { + this.showTemplateVersionDiv = true; if (this.fileType === "text/xml") { textToSaveAsBlob = new Blob([this.configMappingEditorContent], { type: "text/xml" @@ -472,6 +483,7 @@ export class GoldenConfigurationComponent implements OnInit { if (this.tempretrieveFlag) { config_template_fileName = this.fileNameForTempSave; var filextension = config_template_fileName.substring(config_template_fileName.indexOf("V") + 2, config_template_fileName.length); + textToSaveAsBlob = new Blob([this.configMappingEditorContent], { type: "text/" + filextension }); @@ -479,38 +491,27 @@ export class GoldenConfigurationComponent implements OnInit { else { config_template_fileName = this.artifactName; } - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": config_template_fileName:["+ - config_template_fileName+"]"); - this.mappingEditorService.initialise(this.templateeditor.getEditor(), actualContent); - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": start replacements in content"); + this.mappingEditorService.initialise(this.templateeditor.getEditor(), actualContent, this.modal); this.downloadDataObject.template.templateData = this.configMappingEditorContent.replace(/\(([^()]|(R))*\)=\(/g, '').replace(/\)}/g, '}'); this.downloadDataObject.template.templateFileName = config_template_fileName; - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": finish."); } + } //========================== End of onDownloadTemplate() Method============================================ - fileChange( input) { + fileChange(input) { let self = this; let refObj = this.refObj; this.enableValidateTemplate = true; if (refObj && refObj != undefined) { - // refObj = refObj[refObj.length - 1]; if (input.files && input.files[0]) { - //console.log("input files0" + JSON.stringify(input.files[0])) + this.spinner.show(); this.myfileName = input.files[0].name; this.fileName = input.files[0].name; this.fileType = input.files[0].type; - // var fileExtension = this.myfileName.substr(this.myfileName.lastIndexOf('.') + 1); - let reader = new FileReader(); - // if(this.validateUploadedFile(fileExtension)) - //{ - this.readFile( input.files[0], reader, (result) => { + this.readFile(input.files[0], reader, (result) => { if (this.fileType === 'text/xml') { sessionStorage.setItem('fileType', 'text/xml'); } @@ -522,13 +523,13 @@ export class GoldenConfigurationComponent implements OnInit { sessionStorage.setItem('fileType', ''); } + if ('Generated Template' === this.selectedUploadType) { this.configMappingEditorContent = result this.artifactRequest.templateContent = this.configMappingEditorContent; - // console.log("editor content==" + JSON.stringify(this.configMappingEditorContent)) this.notificationService.notifySuccessMessage('Configuration Template file successfully uploaded..'); if (this.artifactRequest.templateContent) { - this.mappingEditorService.initialise(this.templateeditor.getEditor(), this.artifactRequest.templateContent); + this.mappingEditorService.initialise(this.templateeditor.getEditor(), this.artifactRequest.templateContent, this.modal); } } this.enableDownloadButtons = true; @@ -536,21 +537,19 @@ export class GoldenConfigurationComponent implements OnInit { this.saveTemplate(); this.templateeditor.getEditor().$enableBlockSelect = false; this.templateeditor.getEditor().$enableMultiselect = false; - + setTimeout(() => { + /** spinner ends after 3.5 seconds */ + this.spinner.hide(); + }, 3500); }); - // } - // else{ - // this.nService.error("Error", "Incorrect File Format") - //this.configMappingEditorContent='' - //} } else { - this.nService.error("Error", "Failed to read file", this.options); + this.nService.error("Error", "Failed to read file"); } this.myInputVariable.nativeElement.value = ""; } else { - this.nService.error("Error", "Please enter Action and VNF type in Reference Data screen", this.options); + this.nService.error("Error", "Please enter Action and VNF type in Reference Data screen"); return false; } } @@ -561,6 +560,7 @@ export class GoldenConfigurationComponent implements OnInit { // callback with the results callback(reader.result); } + this.notificationService.notifySuccessMessage('Uploading File ' + file.name + ':' + file.type + ':' + file.size); // Read the file reader.readAsText(file, "UTF-8"); } @@ -590,68 +590,43 @@ export class GoldenConfigurationComponent implements OnInit { } //========================== End of appendSlashes() Method============================================ prepareDownloadData() { - if( this.utilityService.getTracelvl() > 0 ) - console.log( this.clName+": prepareDownloadData: start."); this.onDownloadParameter(); this.onDownloadTemplate('Template'); } //========================== End of prepareDownloadData() Method============================================ - syncTemplate( callOrig: string ) { - var methName= "syncTemplate"; - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": start. callOrig:["+callOrig+"]"); - if( callOrig == '0' ) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": this call is from HTML -start 1-st step."); - var ediContent= this.mappingEditorService.editor.session.getValue(); - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": ediContent length="+ediContent.length ); - if( this.utilityService.getTracelvl() > 1 ) - console.log( methName+": ediContent(begin):["+ - ediContent.substr(0,200)+"...]"); - this.procOnSrvSideSvc.sendToSrv( - ediContent, this.mappingEditorService, this ); - } - else - if( callOrig == '1' ) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": this call is from ProcOnSrvSideSvc -continue."); - // console.log( methName+": start replaceNamesWithBlankValues."); - // this.mappingEditorService.replaceNamesWithBlankValues(); - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": start saveTemplate ..."); + syncTemplate() { + this.mappingEditorService.replaceNamesWithBlankValues(); this.saveTemplate(); + var templateData = this.mappingEditorService.paramData; //template data array var pdData = this.paramShareService.getSessionParamData(); //PD data array var paramsContent = localStorage["paramsContent"]; - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": paramsContent length="+paramsContent.length ); + + if (paramsContent && paramsContent != undefined) { + try { + var paramTabData = JSON.parse(paramsContent); + } + catch (error) { + console.log("error is : " + error) + } + } var resultArr = []; var json = {}; var resultParamObj = {}; let checkNamesOnlyCondition: boolean = true; if (templateData && templateData != undefined) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": templateData (params) are not empty."); templateData.forEach(function (item) { if (item.paramValue !== "" && item.paramValue != undefined && item.paramValue != null) { checkNamesOnlyCondition = false; } + + }); + + templateData.forEach(function (item) { resultParamObj[item.paramName] = item.paramValue; }); - templateData = Array.from(new Set(templateData.map((itemInArray) => itemInArray.paramName))) - if( paramsContent && paramsContent != undefined) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": parse paramsContent ..."); - try { - var paramTabData = JSON.parse(paramsContent); - } - catch (error) { - console.log( methName+": paramsContent parse error:" + error); - } - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": templateData length="+templateData.length ); + if (paramTabData && paramTabData != undefined) { templateData.forEach(function (item) { for (var index in paramTabData) { if (item.paramName === index) { @@ -667,148 +642,134 @@ export class GoldenConfigurationComponent implements OnInit { } } } + } - resultArr.push({ - "name": item, - "type": null, - "description": null, - "required": null, - "default": null, - "source": "Manual", - "rule-type": null, - "request-keys": [{ - "key-name": null, - "key-value": null - }, { - "key-name": null, - "key-value": null - }, { - "key-name": null, - "key-value": null - }], - "response-keys": [{ - "key-name": null, - "key-value": null - }, { - "key-name": null, - "key-value": null - }, { - "key-name": null, - "key-value": null - }, { - "key-name": null, - "key-value": null - }, { - "key-name": null, - "key-value": null - }], - "ruleTypeValues": [null] - }) }); + } localStorage["paramsContent"] = JSON.stringify(resultParamObj); - if (pdData && pdData != undefined) { - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+ - ": have pdData, resultArr.length="+resultArr.length ); - for (var i = 0; i < resultArr.length; i++) { - pdData.forEach(function (arr2item) { - if (resultArr[i].name === arr2item.name) { - var json = { - "name": arr2item.name, - "type": arr2item.type, - "description": arr2item.description, - "required": arr2item.required, - "default": arr2item.default, - "source": arr2item.source, - "rule-type": arr2item["rule-type"], - "request-keys": arr2item["request-keys"], - "response-keys": arr2item["response-keys"], - "ruleTypeValues": arr2item.ruleTypeValues - }; - resultArr.splice(i, 1, json) - } - }); - }; - } - this.paramShareService.setSessionParamData(resultArr); - this.mappingEditorService.paramData = []; - //navigate to PD page after sync - if( this.utilityService.getTracelvl() > 0 ) - console.log( methName+": navigate to PD page after sync ..."); - this - .router - .navigate(['../../../vnfs/design/parameterDefinitions/create']); + templateData = Array.from(new Set(templateData.map((itemInArray) => itemInArray.paramName))) + + //reformatting arr1 to match with PD + templateData.forEach(function (item) { + + resultArr.push({ + "name": item, + "type": null, + "description": null, + "required": null, + "default": null, + "source": "Manual", + "rule-type": null, + "request-keys": [{ + "key-name": null, + "key-value": null + }, { + "key-name": null, + "key-value": null + }, { + "key-name": null, + "key-value": null + }], + "response-keys": [{ + "key-name": null, + "key-value": null + }, { + "key-name": null, + "key-value": null + }, { + "key-name": null, + "key-value": null + }, { + "key-name": null, + "key-value": null + }, { + "key-name": null, + "key-value": null + }], + "ruleTypeValues": [null] + + }) + }); } + if (pdData && pdData != undefined) { + for (var i = 0; i < resultArr.length; i++) { + + pdData.forEach(function (arr2item) { + if (resultArr[i].name === arr2item.name) { + + var json = { + "name": arr2item.name, + "type": arr2item.type, + "description": arr2item.description, + "required": arr2item.required, + "default": arr2item.default, + "source": arr2item.source, + "rule-type": arr2item["rule-type"], + "request-keys": arr2item["request-keys"], + "response-keys": arr2item["response-keys"], + "ruleTypeValues": arr2item.ruleTypeValues + }; + resultArr.splice(i, 1, json) + } + + }); + + }; + } + this.paramShareService.setSessionParamData(resultArr); + this.mappingEditorService.paramData = []; + //navigate to PD page after sync + this + .router + .navigate(['../../../vnfs/design/parameterDefinitions/create']); } //========================== End of syncTemplate() Method============================================ mergeParams() { this.mergeStatus = this.mappingEditorService.autoAnnotateDataForParams(); if (this.mergeStatus) { - this.nService.success("Success", "Merge Successful", this.options); + this.nService.success("Success", "Merge Successful"); } else { - this.nService.error("Error", "Merge Unsuccessful", this.options); + this.nService.error("Error", "Merge Unsuccessful"); } this.saveTemplate(); } //========================== End of mergeParams() Method============================================ public handleAnnotation(modal) { - this.tempName = ''; + this.selectedWord = this.templateeditor.getEditor().session.getTextRange(this.templateeditor.getEditor().selectionRange); if (this.selectedWord && this.selectedWord != undefined) modal.open(); } //========================== End of handleAnnotations() Method============================================ - public handleUndo(modal) { - let markersList = this.templateeditor.getEditor().session.getMarkers(); - - let filteredObj = {}; - let lastMarker = Object.keys(markersList).filter(function (key) { - if (markersList[key]['clazz'] != 'undoMarker') { - filteredObj[key] = markersList[key] - } - return filteredObj; - }); - this.templateeditor.getEditor().session.getUndoManager().undo(); - this.templateeditor.getEditor().getSelection().clearSelection(); - - this.templateeditor.getEditor().session.removeMarker(this.templateeditor.getEditor().getSelection().session.$markerId); - this.templateeditor.getEditor().session.addMarker(markersList[parseInt(lastMarker[lastMarker.length - 1])].range, 'undoMarker', 'text') - } - //========================== End of handleUndo() Method============================================ public submitNameValues() { - this.checkNameEntered = true; - this.checkSpace = true; if (this.tempName) { - if (this.tempName.startsWith(' ') || this.tempName.endsWith(' ')) { - this.checkSpace = false - } - else { - this.checkNameEntered = true; + this.checkNameEntered = true; - if (this.selectedWord) { - if (this.selectedWord.startsWith('${(')) { - var replaceWord: any = this.replaceWord = this.selectedWord.substring(3, this.selectedWord.indexOf(')=(')) + this.tempName; - this.templateeditor.getEditor().session.replace(this.templateeditor.getEditor().session.selection.getRange(), replaceWord); + if (this.selectedWord) { + if (this.selectedWord.startsWith('${(')) { + var replaceWord: any = this.replaceWord = this.selectedWord.substring(3, this.selectedWord.indexOf(')=(')) + this.tempName; + this.templateeditor.getEditor().session.replace(this.templateeditor.getEditor().session.selection.getRange(), replaceWord); - } else { - let mappingKey = this.mappingEditorService.getKeysForValues(this.selectedWord); - var replaceWord: any = this.replaceWord = '${(' + this.selectedWord + ')=(' + this.tempName + ')}'; - this.templateeditor.getEditor().session.replace(this.templateeditor.getEditor().session.selection.getRange(), replaceWord); + } else { + let mappingKey = this.mappingEditorService.getKeysForValues(this.selectedWord); + var replaceWord: any = this.replaceWord = '${(' + this.selectedWord + ')=(' + this.tempName + ')}'; + this.templateeditor.getEditor().session.replace(this.templateeditor.getEditor().session.selection.getRange(), replaceWord); - } } - this.mappingEditorService.refreshEditor(); - this.tempName = ''; - this.modal.close(); } + this.mappingEditorService.refreshEditor(); + this.tempName = ''; + this.modal.close(); + } else { this.checkNameEntered = false; } + } //========================== End of submitNameValues() Method============================================ } diff --git a/src/app/vnfs/myvnfs/myvnfs.component.css b/src/app/vnfs/myvnfs/myvnfs.component.css index f105a7d..c1b1169 100644 --- a/src/app/vnfs/myvnfs/myvnfs.component.css +++ b/src/app/vnfs/myvnfs/myvnfs.component.css @@ -32,7 +32,4 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. table.table th, table.table td { padding: 0rem; -} -.error-message { - color: red; -} +} \ No newline at end of file diff --git a/src/app/vnfs/myvnfs/myvnfs.component.html b/src/app/vnfs/myvnfs/myvnfs.component.html index 097cf1e..3bfabc3 100644 --- a/src/app/vnfs/myvnfs/myvnfs.component.html +++ b/src/app/vnfs/myvnfs/myvnfs.component.html @@ -34,7 +34,7 @@ limitations under the License.
-
+
@@ -54,7 +54,6 @@ limitations under the License. - @@ -85,9 +84,6 @@ limitations under the License.
- @@ -97,7 +93,7 @@ limitations under the License.
{{item['vnf-type']}} {{item['vnfc-type']}}