blob: c44fa9bfa8b5c309a8b136fd6a9b9e7cd57bbba0 [file] [log] [blame]
kumaran.m3b4814a2020-05-01 19:48:54 +05301/*
2 Copyright 2020 TATA ELXSI
3
4 Licensed under the Apache License, Version 2.0 (the 'License');
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
17 */
18/**
19 * @file NS Instance Component
20 */
21import { Component, Injector, OnInit } from '@angular/core';
22import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
23import { TranslateService } from '@ngx-translate/core';
24import { CONFIGCONSTANT, ERRORDATA, MODALCLOSERESPONSEDATA } from 'CommonModel';
25import { DataService } from 'DataService';
26import { environment } from 'environment';
27import { InstantiateNsComponent } from 'InstantiateNs';
28import { LocalDataSource } from 'ng2-smart-table';
29import { NSDInstanceData, NSInstanceDetails } from 'NSInstanceModel';
30import { NSInstancesActionComponent } from 'NSInstancesActionComponent';
31import { RestService } from 'RestService';
32import { Subscription } from 'rxjs';
33import { SharedService } from 'SharedService';
34
35/**
36 * Creating component
37 * @Component takes NSInstancesComponent.html as template url
38 */
39@Component({
40 templateUrl: './NSInstancesComponent.html',
41 styleUrls: ['./NSInstancesComponent.scss']
42})
43/** Exporting a class @exports NSInstancesComponent */
44export class NSInstancesComponent implements OnInit {
45 /** Injector to invoke other services @public */
46 public injector: Injector;
47
48 /** NS Instance array @public */
49 public nsInstanceData: object[] = [];
50
51 /** Datasource instance @public */
52 public dataSource: LocalDataSource = new LocalDataSource();
53
54 /** SelectedRows array @public */
55 public selectedRows: object[] = [];
56
57 /** Selected list array @public */
58 public selectList: object[] = [];
59
60 /** Instance component are stored in settings @public */
61 public settings: {} = {};
62
63 /** Contains objects for menu settings @public */
64 public columnList: {} = {};
65
66 /** Check the loading results @public */
67 public isLoadingResults: boolean = true;
68
69 /** Give the message for the loading @public */
70 public message: string = 'PLEASEWAIT';
71
72 /** Class for empty and present data @public */
73 public checkDataClass: string;
74
75 /** operational State init data @public */
76 public operationalStateFirstStep: string = CONFIGCONSTANT.operationalStateFirstStep;
77
78 /** operational State running data @public */
79 public operationalStateSecondStep: string = CONFIGCONSTANT.operationalStateSecondStep;
80
81 /** operational State failed data @public */
82 public operationalStateThirdStep: string = CONFIGCONSTANT.operationalStateThirdStep;
83
Barath Kumar R07698ab2021-03-30 11:50:42 +053084 /** operational State scaling data @public */
85 public operationalStateFourthStep: string = CONFIGCONSTANT.operationalStateFourthStep;
86
kumaran.m3b4814a2020-05-01 19:48:54 +053087 /** Config State init data @public */
88 public configStateFirstStep: string = CONFIGCONSTANT.configStateFirstStep;
89
90 /** Config State init data @public */
91 public configStateSecondStep: string = CONFIGCONSTANT.configStateSecondStep;
92
93 /** Config State init data @public */
94 public configStateThirdStep: string = CONFIGCONSTANT.configStateThirdStep;
95
96 /** Instance of the modal service @private */
97 private modalService: NgbModal;
98
99 /** dataService to pass the data from one component to another @private */
100 private dataService: DataService;
101
102 /** Utilizes rest service for any CRUD operations @private */
103 private restService: RestService;
104
105 /** Contains all methods related to shared @private */
106 private sharedService: SharedService;
107
108 /** Contains tranlsate instance @private */
109 private translateService: TranslateService;
110
111 /** Instance of subscriptions @private */
112 private generateDataSub: Subscription;
113
114 constructor(injector: Injector) {
115 this.injector = injector;
116 this.restService = this.injector.get(RestService);
117 this.dataService = this.injector.get(DataService);
118 this.sharedService = this.injector.get(SharedService);
119 this.translateService = this.injector.get(TranslateService);
120 this.modalService = this.injector.get(NgbModal);
121 }
122
123 /**
124 * Lifecyle Hooks the trigger before component is instantiate
125 */
126 public ngOnInit(): void {
127 this.generateTableColumn();
128 this.generateTableSettings();
129 this.generateData();
Barath Kumar R063a3f12020-12-29 16:35:09 +0530130 this.generateDataSub = this.sharedService.dataEvent.subscribe((): void => { this.generateData(); });
kumaran.m3b4814a2020-05-01 19:48:54 +0530131 }
132
133 /** Generate smart table row title and filters @public */
134 public generateTableSettings(): void {
135 this.settings = {
136 columns: this.columnList,
137 actions: { add: false, edit: false, delete: false, position: 'right' },
138 attr: this.sharedService.tableClassConfig(),
139 pager: this.sharedService.paginationPagerConfig(),
140 noDataMessage: this.translateService.instant('NODATAMSG')
141 };
142 }
143
144 /** Generate smart table row title and filters @public */
145 public generateTableColumn(): void {
146 this.columnList = {
147 name: { title: this.translateService.instant('NAME'), width: '15%', sortDirection: 'asc' },
148 identifier: { title: this.translateService.instant('IDENTIFIER'), width: '20%' },
149 NsdName: { title: this.translateService.instant('NSDNAME'), width: '15%' },
150 OperationalStatus: {
151 title: this.translateService.instant('OPERATIONALSTATUS'), width: '10%', type: 'html',
152 filter: {
153 type: 'list',
154 config: {
155 selectText: 'Select',
156 list: [
157 { value: this.operationalStateFirstStep, title: this.operationalStateFirstStep },
158 { value: this.operationalStateSecondStep, title: this.operationalStateSecondStep },
Barath Kumar R07698ab2021-03-30 11:50:42 +0530159 { value: this.operationalStateThirdStep, title: this.operationalStateThirdStep },
160 { value: this.operationalStateFourthStep, title: this.operationalStateFourthStep }
kumaran.m3b4814a2020-05-01 19:48:54 +0530161 ]
162 }
163 },
164 valuePrepareFunction: (cell: NSDInstanceData, row: NSDInstanceData): string => {
165 if (row.OperationalStatus === this.operationalStateFirstStep) {
166 return `<span class="icon-label" title="${row.OperationalStatus}">
167 <i class="fas fa-clock text-warning"></i>
168 </span>`;
169 } else if (row.OperationalStatus === this.operationalStateSecondStep) {
170 return `<span class="icon-label" title="${row.OperationalStatus}">
171 <i class="fas fa-check-circle text-success"></i>
172 </span>`;
173 } else if (row.OperationalStatus === this.operationalStateThirdStep) {
174 return `<span class="icon-label" title="${row.OperationalStatus}">
175 <i class="fas fa-times-circle text-danger"></i>
176 </span>`;
Barath Kumar R07698ab2021-03-30 11:50:42 +0530177 } else if (row.OperationalStatus === this.operationalStateFourthStep) {
178 return `<span class="icon-label" title="${row.OperationalStatus}">
179 <i class="fas fa-compress-alt text-success"></i>
180 </span>`;
kumaran.m3b4814a2020-05-01 19:48:54 +0530181 } else {
182 return `<span>${row.OperationalStatus}</span>`;
183 }
184 }
185 },
186 ConfigStatus: {
187 title: this.translateService.instant('CONFIGSTATUS'), width: '10%', type: 'html',
188 filter: {
189 type: 'list',
190 config: {
191 selectText: 'Select',
192 list: [
193 { value: this.configStateFirstStep, title: this.configStateFirstStep },
194 { value: this.configStateSecondStep, title: this.configStateSecondStep },
195 { value: this.configStateThirdStep, title: this.configStateThirdStep }
196 ]
197 }
198 },
199 valuePrepareFunction: (cell: NSDInstanceData, row: NSDInstanceData): string => {
200 if (row.ConfigStatus === this.configStateFirstStep) {
201 return `<span class="icon-label" title="${row.ConfigStatus}">
202 <i class="fas fa-clock text-warning"></i>
203 </span>`;
204 } else if (row.ConfigStatus === this.configStateSecondStep) {
205 return `<span class="icon-label" title="${row.ConfigStatus}">
206 <i class="fas fa-check-circle text-success"></i>
207 </span>`;
208 } else if (row.ConfigStatus === this.configStateThirdStep) {
209 return `<span class="icon-label" title="${row.ConfigStatus}">
210 <i class="fas fa-times-circle text-danger"></i>
211 </span>`;
212 } else {
213 return `<span>${row.ConfigStatus}</span>`;
214 }
215 }
216 },
217 DetailedStatus: { title: this.translateService.instant('DETAILEDSTATUS'), width: '15%' },
218 Actions: {
219 name: 'Action', width: '15%', filter: false, sort: false, type: 'custom',
220 title: this.translateService.instant('ACTIONS'),
221 valuePrepareFunction: (cell: NSDInstanceData, row: NSDInstanceData): NSDInstanceData => row,
222 renderComponent: NSInstancesActionComponent
223 }
224 };
225 }
226
227 /** generateData initiate the ns-instance list @public */
228 public generateData(): void {
229 this.isLoadingResults = true;
Barath Kumar R063a3f12020-12-29 16:35:09 +0530230 this.restService.getResource(environment.NSDINSTANCES_URL).subscribe((nsdInstancesData: NSInstanceDetails[]): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530231 this.nsInstanceData = [];
Barath Kumar R063a3f12020-12-29 16:35:09 +0530232 nsdInstancesData.forEach((nsdInstanceData: NSInstanceDetails): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530233 const nsDataObj: NSDInstanceData = {
234 name: nsdInstanceData.name,
235 identifier: nsdInstanceData.id,
236 NsdName: nsdInstanceData['nsd-name-ref'],
237 OperationalStatus: nsdInstanceData['operational-status'],
238 ConfigStatus: nsdInstanceData['config-status'],
239 DetailedStatus: nsdInstanceData['detailed-status'],
Barath Kumar R063a3f12020-12-29 16:35:09 +0530240 memberIndex: nsdInstanceData.nsd.df,
Barath Kumar R07698ab2021-03-30 11:50:42 +0530241 nsConfig: nsdInstanceData.nsd['ns-configuration'],
242 adminDetails: nsdInstanceData._admin,
243 vnfID: nsdInstanceData['vnfd-id'],
244 nsd: nsdInstanceData.nsd,
Barath Kumar Rf2ae5462021-03-01 12:52:33 +0530245 'nsd-id': nsdInstanceData['nsd-id'],
SANDHYA.JS1584e3e2022-10-31 20:11:50 +0530246 vcaStatus: nsdInstanceData.vcaStatus,
247 constituent: nsdInstanceData['constituent-vnfr-ref']
kumaran.m3b4814a2020-05-01 19:48:54 +0530248 };
249 this.nsInstanceData.push(nsDataObj);
250 });
251 if (this.nsInstanceData.length > 0) {
252 this.checkDataClass = 'dataTables_present';
253 } else {
254 this.checkDataClass = 'dataTables_empty';
255 }
Barath Kumar R063a3f12020-12-29 16:35:09 +0530256 this.dataSource.load(this.nsInstanceData).then((data: {}): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530257 this.isLoadingResults = false;
258 }).catch();
Barath Kumar R063a3f12020-12-29 16:35:09 +0530259 }, (error: ERRORDATA): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530260 this.restService.handleError(error, 'get');
261 this.isLoadingResults = false;
262 });
263 }
264
265 /** smart table listing manipulation @public */
266 public onChange(perPageValue: number): void {
267 this.dataSource.setPaging(1, perPageValue, true);
268 }
269
270 /** smart table listing manipulation @public */
271 public onUserRowSelect(event: MessageEvent): void {
272 Object.assign(event.data, { page: 'ns-instance' });
273 this.dataService.changeMessage(event.data);
274 }
275
276 /** Instantiate NS using modalservice @public */
277 public instantiateNS(): void {
278 const modalRef: NgbModalRef = this.modalService.open(InstantiateNsComponent, { backdrop: 'static' });
Barath Kumar R063a3f12020-12-29 16:35:09 +0530279 modalRef.result.then((result: MODALCLOSERESPONSEDATA): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530280 if (result) {
281 this.generateData();
282 }
283 }).catch();
284 }
285
286 /**
287 * Lifecyle hook which get trigger on component destruction
288 */
289 public ngOnDestroy(): void {
290 this.generateDataSub.unsubscribe();
291 }
292}