Merge changes from topics "VID-14", "VID-13", "VID-12"
[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   extractServiceFields(): any {
194     let instanceFields : ServiceInstance;
195     instanceFields = this.store.getState().service.serviceInstance[this.serviceModelId];
196     if (instanceFields.action === ServiceInstanceActions.Create) {
197       instanceFields.subscriberName = this.store.getState().service.subscribers.find(sub => sub.id === instanceFields.globalSubscriberId).name;
198       instanceFields.owningEntityName = this.extractOwningEntityNameAccordingtoId(instanceFields.owningEntityId);
199     }
200     return _.omit(instanceFields,['optionalGroupMembersMap', 'upgradedVFMSonsCounter', 'isUpgraded', 'latestAvailableVersion']);
201   }
202
203   private getAction(): string {
204     if(!_.isNil(this.store.getState().service.serviceInstance[this.serviceModelId].action))
205       return this.store.getState().service.serviceInstance[this.serviceModelId].action.split('_').pop();
206     return;
207   }
208
209   public deployService(): void {
210       let instanceFields = this.extractServiceFields();
211       if (this.mode !== DrawingBoardModes.RETRY_EDIT) {
212         instanceFields.rollbackOnFailure = instanceFields.rollbackOnFailure === 'true';
213         this.msoService.submitMsoTask(instanceFields).subscribe((result) => {
214           window.parent.postMessage("navigateToInstantiationStatus", '*');
215         });
216       } else {
217         this.msoService.retryBulkMsoTask(this.jobId, instanceFields).subscribe((result) => {
218           window.parent.postMessage("navigateToInstantiationStatus", '*');
219         });
220       }
221   }
222
223   closePage() {
224     let messageBoxData : MessageBoxData = new MessageBoxData(
225          "Delete Instantiation",  // modal title
226       "You are about to stop the instantiation process of this service. \nAll data will be lost. Are you sure you want to stop?",
227       SdcUiCommon.ModalType.warning,
228       SdcUiCommon.ModalSize.medium,
229              [
230       {text:"Stop Instantiation", size:"large",  callback: this.navigate.bind(this), closeModal:true},
231       {text:"Cancel", size:"medium", closeModal:true}
232     ]);
233
234     MessageBoxService.openModal.next(messageBoxData);
235   }
236
237
238
239   navigate(){
240     window.parent.postMessage("navigateTo", "*");
241   }
242 }