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";
14 GenericFormPopupComponent,
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";
26 selector: 'drawing-board-header',
27 providers: [MsoService],
28 templateUrl: './drawing-board-header.component.html',
29 styleUrls: ['./drawing-board-header.component.scss']
32 export class DrawingBoardHeader {
34 numServicesToDeploy: number;
35 status: string = 'Designing a new service';
36 serviceModelId: 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;
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) {
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;
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();
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;
83 @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
85 editViewEdit(): void {
86 window.parent.location.assign(this._drawingBoardHeaderService.generateOldViewEditPath());
89 isPermitted() : boolean {
90 return this.drawingBoardPermissions.isEditPermitted;
93 getModeName():string {
95 case DrawingBoardModes.CREATE:
97 case DrawingBoardModes.VIEW:
98 case DrawingBoardModes.RETRY:
100 case DrawingBoardModes.EDIT:
101 case DrawingBoardModes.RETRY_EDIT:
108 public onContextMenu($event: MouseEvent, item: any): void {
109 this._contextMenuService.show.next({
110 contextMenu: this.contextMenu,
114 $event.preventDefault();
115 $event.stopPropagation();
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;
130 public editService(): void {
131 this._iframeService.addClassOpenModal(this.parentElementClassName);
132 this.dialogService.addDialog(GenericFormPopupComponent, {
133 type: PopupType.SERVICE,
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
146 onDeleteUndoDeleteClick(){
147 this.cancelResume(this.serviceModelId);
148 this.isDeleted = !this.isDeleted;
149 this._drawingBoardHeaderService.deleteService(this.serviceModelId, this.isDeleted)
152 determineDataTestId() :string {
155 return'resume-status-type-header';
157 return 'delete-status-type-header';
159 return 'upgrade-status-type-header';
163 onResumeUndoResumeClick(){
164 this.cancelDelete(this.serviceModelId);
165 this.isResume = !this.isResume;
166 this._drawingBoardHeaderService.toggleResumeService(this.serviceModelId, this.isResume);
169 cancelDelete(serviceModelId: string) {
170 if (this.isDeleted) {
171 this.isDeleted = false;
172 this._drawingBoardHeaderService.deleteService(serviceModelId,this.isDeleted);
176 cancelResume(serviceModelId: string) {
178 this.isResume = false;
179 this._drawingBoardHeaderService.toggleResumeService(serviceModelId,this.isResume);
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;
190 return owningEntityName;
193 private extractSubscriberNameByGlobalSubscriberId(globalSubscriberId: string) {
194 return this.store.getState().service.subscribers.find(sub => sub.id === globalSubscriberId).name;
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);
204 if (_.isNil(instanceFields.owningEntityName)) {
205 instanceFields.owningEntityName = this.extractOwningEntityNameAccordingToId(instanceFields.owningEntityId);
208 return _.omit(instanceFields,['optionalGroupMembersMap', 'upgradedVFMSonsCounter', 'isUpgraded', 'latestAvailableVersion']);
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();
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", '*');
225 this.msoService.retryBulkMsoTask(this.jobId, instanceFields).subscribe((result) => {
226 window.parent.postMessage("navigateToInstantiationStatus", '*');
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,
238 {text:"Stop Instantiation", size:"large", callback: this.navigate.bind(this), closeModal:true},
239 {text:"Cancel", size:"medium", closeModal:true}
242 MessageBoxService.openModal.next(messageBoxData);
248 window.parent.postMessage("navigateTo", "*");