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 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);
200 return _.omit(instanceFields,['optionalGroupMembersMap', 'upgradedVFMSonsCounter', 'isUpgraded', 'latestAvailableVersion']);
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();
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", '*');
217 this.msoService.retryBulkMsoTask(this.jobId, instanceFields).subscribe((result) => {
218 window.parent.postMessage("navigateToInstantiationStatus", '*');
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,
230 {text:"Stop Instantiation", size:"large", callback: this.navigate.bind(this), closeModal:true},
231 {text:"Cancel", size:"medium", closeModal:true}
234 MessageBoxService.openModal.next(messageBoxData);
240 window.parent.postMessage("navigateTo", "*");