Extract subscriber-name only when it is not defined
[vid.git] / vid-webpack-master / src / app / drawingBoard / service-planning / drawing-board-header / drawing-board-header.component.ts
1 import {Component, ViewChild} from '@angular/core';
2 import {ContextMenuComponent, ContextMenuService} from 'ngx-contextmenu';
3 import {DialogService} from 'ng2-bootstrap-modal';
4 import {MsoService} from '../../../shared/services/msoService/mso.service'
5 import * as _ from 'lodash';
6 import {ActivatedRoute} from '@angular/router';
7 import {ServiceInstance} from "../../../shared/models/serviceInstance";
8 import {OwningEntity} from "../../../shared/models/owningEntity";
9 import {MessageBoxData} from "../../../shared/components/messageBox/messageBox.data";
10 import {NgRedux} from "@angular-redux/store";
11 import {AppState} from "../../../shared/store/reducers";
12 import {IframeService} from "../../../shared/utils/iframe.service";
13 import {
14   GenericFormPopupComponent,
15   PopupType
16 } from "../../../shared/components/genericFormPopup/generic-form-popup.component";
17 import {ServicePopupService} from "../../../shared/components/genericFormPopup/genericFormServices/service/service.popup.service";
18 import {SdcUiCommon} from "onap-ui-angular";
19 import {DrawingBoardModes} from "../drawing-board.modes";
20 import {DrawingBoardHeaderService} from "./drawing-board-header.service";
21 import {ServiceInstanceActions} from "../../../shared/models/serviceInstanceActions";
22 import {DrawingBoardPermissions} from "../../guards/servicePlanningGuard/drawingBoardGuard";
23 import {MessageBoxService} from "../../../shared/components/messageBox/messageBox.service";
24
25 @Component({
26   selector: 'drawing-board-header',
27   providers: [MsoService],
28   templateUrl: './drawing-board-header.component.html',
29   styleUrls: ['./drawing-board-header.component.scss']
30 })
31
32 export class DrawingBoardHeader {
33   serviceName: string;
34   numServicesToDeploy: number;
35   status: string = 'Designing a new service';
36   serviceModelId: string;
37   jobId: string;
38   parentElementClassName = 'content';
39   mode : DrawingBoardModes = DrawingBoardModes.CREATE;
40   serviceOrchStatus: string;
41   isDeleted: boolean = false;
42   isUpgrade: boolean = false;
43   isResume: boolean = false;
44   store : NgRedux<AppState>;
45   drawingBoardPermissions : DrawingBoardPermissions;
46   drawingBoardHeaderService : DrawingBoardHeaderService;
47   isServiceFailed: boolean;
48   serviceStatusMessage: string;
49   private readonly action: string;
50   private presentedAction: string;
51
52   constructor(private _contextMenuService: ContextMenuService, private dialogService: DialogService,
53               private _iframeService : IframeService,
54               private route: ActivatedRoute, private msoService: MsoService,
55               private _servicePopupService : ServicePopupService,
56               private _drawingBoardHeaderService : DrawingBoardHeaderService,
57               private _store: NgRedux<AppState>,
58               private _drawingBoardPermissions : DrawingBoardPermissions) {
59     this.store = _store;
60     this.drawingBoardPermissions = _drawingBoardPermissions;
61     this.drawingBoardHeaderService = _drawingBoardHeaderService;
62     this.mode = (!_.isNil(this.route.routeConfig.path) && this.route.routeConfig.path !== "") ?   this.route.routeConfig.path as DrawingBoardModes : DrawingBoardModes.CREATE;
63     this.route
64       .queryParams
65       .subscribe((params) => {
66         this.serviceModelId = params['serviceModelId'];
67         this.jobId = params['jobId'];
68         if (_.has(this.store.getState().service.serviceHierarchy, this.serviceModelId)) {
69           this.setValuesFromStore();
70           this.store.subscribe(() => {
71             this.setValuesFromStore();
72           });
73         }
74       });
75     if (!_.isNil(this.store.getState().service.serviceInstance[this.serviceModelId].action)){
76       if (this.store.getState().service.serviceInstance[this.serviceModelId].action.includes("Upgrade")) {
77         this.isUpgrade = true;
78       }
79     }
80   }
81
82
83   @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
84
85   editViewEdit(): void {
86      window.parent.location.assign(this._drawingBoardHeaderService.generateOldViewEditPath());
87   }
88
89   isPermitted() : boolean {
90     return this.drawingBoardPermissions.isEditPermitted;
91 }
92
93   getModeName():string {
94     switch (this.mode) {
95       case DrawingBoardModes.CREATE:
96         return 'IN DESIGN';
97       case DrawingBoardModes.VIEW:
98       case DrawingBoardModes.RETRY:
99         return 'VIEW ONLY';
100       case DrawingBoardModes.EDIT:
101       case DrawingBoardModes.RETRY_EDIT:
102         return 'IN EDITING';
103       default:
104         return 'IN DESIGN';
105     }
106
107   }
108   public onContextMenu($event: MouseEvent, item: any): void {
109     this._contextMenuService.show.next({
110       contextMenu: this.contextMenu,
111       event: $event,
112       item: item,
113     });
114     $event.preventDefault();
115     $event.stopPropagation();
116   }
117
118   private setValuesFromStore() {
119     if(!_.isNil(this.store.getState().service.serviceInstance) && !_.isNil(this.store.getState().service.serviceInstance[this.serviceModelId])){
120       const serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId];
121       this.numServicesToDeploy = serviceInstance.bulkSize;
122       this.serviceName = serviceInstance.instanceName || '<Automatically Assigned>';
123       this.serviceOrchStatus =  serviceInstance.orchStatus || "";
124       this.isServiceFailed = serviceInstance.isFailed;
125       this.serviceStatusMessage = serviceInstance.statusMessage;
126       this.isUpgrade = serviceInstance.isUpgraded;
127     }
128   }
129
130   public editService(): void {
131     this._iframeService.addClassOpenModal(this.parentElementClassName);
132     this.dialogService.addDialog(GenericFormPopupComponent, {
133       type: PopupType.SERVICE,
134       uuidData: <any>{
135         type : PopupType.SERVICE,
136         isMacro : this.store.getState().service.serviceHierarchy[this.serviceModelId].service.vidNotions.instantiationType === 'Macro',
137         serviceId: this.serviceModelId,
138         popupService: this._servicePopupService
139       },
140       isUpdateMode: true
141     });
142   }
143
144
145
146   onDeleteUndoDeleteClick(){
147     this.cancelResume(this.serviceModelId);
148     this.isDeleted = !this.isDeleted;
149     this._drawingBoardHeaderService.deleteService(this.serviceModelId, this.isDeleted)
150   }
151
152   determineDataTestId() :string {
153     switch(true) {
154       case this.isResume:
155         return'resume-status-type-header';
156       case this.isDeleted:
157         return 'delete-status-type-header';
158       case this.isUpgrade:
159         return 'upgrade-status-type-header';
160     }
161   }
162
163   onResumeUndoResumeClick(){
164     this.cancelDelete(this.serviceModelId);
165     this.isResume = !this.isResume;
166     this._drawingBoardHeaderService.toggleResumeService(this.serviceModelId, this.isResume);
167   }
168
169   cancelDelete(serviceModelId: string) {
170     if (this.isDeleted) {
171       this.isDeleted = false;
172       this._drawingBoardHeaderService.deleteService(serviceModelId,this.isDeleted);
173     }
174   }
175
176   cancelResume(serviceModelId: string) {
177     if (this.isResume) {
178       this.isResume = false;
179       this._drawingBoardHeaderService.toggleResumeService(serviceModelId,this.isResume);
180     }
181   }
182
183   extractOwningEntityNameAccordingToId(id:String): string {
184     let owningEntityName;
185     _.forEach(this.store.getState().service.categoryParameters.owningEntityList,(owningEntity: OwningEntity) => {
186       if (owningEntity.id === id) {
187         owningEntityName = owningEntity.name;
188
189       }});
190     return owningEntityName;
191   }
192
193   private extractSubscriberNameByGlobalSubscriberId(globalSubscriberId: string) {
194     return this.store.getState().service.subscribers.find(sub => sub.id === globalSubscriberId).name;
195   }
196
197   extractServiceFields(): any {
198     let instanceFields : ServiceInstance;
199     instanceFields = this.store.getState().service.serviceInstance[this.serviceModelId];
200     if (instanceFields.action === ServiceInstanceActions.Create) {
201       if(_.isNil(instanceFields.subscriberName)) {
202         instanceFields.subscriberName = this.extractSubscriberNameByGlobalSubscriberId(instanceFields.globalSubscriberId);
203       }
204       if (_.isNil(instanceFields.owningEntityName)) {
205         instanceFields.owningEntityName = this.extractOwningEntityNameAccordingToId(instanceFields.owningEntityId);
206       }
207     }
208     return _.omit(instanceFields,['optionalGroupMembersMap', 'upgradedVFMSonsCounter', 'isUpgraded', 'latestAvailableVersion']);
209   }
210
211   private getAction(): string {
212     if(!_.isNil(this.store.getState().service.serviceInstance[this.serviceModelId].action))
213       return this.store.getState().service.serviceInstance[this.serviceModelId].action.split('_').pop();
214     return;
215   }
216
217   public deployService(): void {
218       let instanceFields = this.extractServiceFields();
219       if (this.mode !== DrawingBoardModes.RETRY_EDIT) {
220         instanceFields.rollbackOnFailure = instanceFields.rollbackOnFailure === 'true';
221         this.msoService.submitMsoTask(instanceFields).subscribe((result) => {
222           window.parent.postMessage("navigateToInstantiationStatus", '*');
223         });
224       } else {
225         this.msoService.retryBulkMsoTask(this.jobId, instanceFields).subscribe((result) => {
226           window.parent.postMessage("navigateToInstantiationStatus", '*');
227         });
228       }
229   }
230
231   closePage() {
232     let messageBoxData : MessageBoxData = new MessageBoxData(
233          "Delete Instantiation",  // modal title
234       "You are about to stop the instantiation process of this service. \nAll data will be lost. Are you sure you want to stop?",
235       SdcUiCommon.ModalType.warning,
236       SdcUiCommon.ModalSize.medium,
237              [
238       {text:"Stop Instantiation", size:"large",  callback: this.navigate.bind(this), closeModal:true},
239       {text:"Cancel", size:"medium", closeModal:true}
240     ]);
241
242     MessageBoxService.openModal.next(messageBoxData);
243   }
244
245
246
247   navigate(){
248     window.parent.postMessage("navigateTo", "*");
249   }
250 }