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 isResume: boolean = false;
43 store : NgRedux<AppState>;
44 drawingBoardPermissions : DrawingBoardPermissions;
45 drawingBoardHeaderService : DrawingBoardHeaderService;
46 isServiceFailed: boolean;
47 serviceStatusMessage: string;
48 constructor(private _contextMenuService: ContextMenuService, private dialogService: DialogService,
49 private _iframeService : IframeService,
50 private route: ActivatedRoute, private msoService: MsoService,
51 private _servicePopupService : ServicePopupService,
52 private _drawingBoardHeaderService : DrawingBoardHeaderService,
53 private _store: NgRedux<AppState>,
54 private _drawingBoardPermissions : DrawingBoardPermissions) {
56 this.drawingBoardPermissions = _drawingBoardPermissions;
57 this.drawingBoardHeaderService = _drawingBoardHeaderService;
58 this.mode = (!_.isNil(this.route.routeConfig.path) && this.route.routeConfig.path !== "") ? this.route.routeConfig.path as DrawingBoardModes : DrawingBoardModes.CREATE;
61 .subscribe((params) => {
62 this.serviceModelId = params['serviceModelId'];
63 this.jobId = params['jobId'];
64 if (_.has(this.store.getState().service.serviceHierarchy, this.serviceModelId)) {
65 this.setValuesFromStore();
66 this.store.subscribe(() => {
67 this.setValuesFromStore();
74 @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
76 editViewEdit(): void {
77 window.parent.location.assign(this._drawingBoardHeaderService.generateOldViewEditPath());
80 isPermitted() : boolean {
81 return this.drawingBoardPermissions.isEditPermitted;
84 getModeName():string {
86 case DrawingBoardModes.CREATE:
88 case DrawingBoardModes.VIEW:
89 case DrawingBoardModes.RETRY:
91 case DrawingBoardModes.EDIT:
92 case DrawingBoardModes.RETRY_EDIT:
99 public onContextMenu($event: MouseEvent, item: any): void {
100 this._contextMenuService.show.next({
101 contextMenu: this.contextMenu,
105 $event.preventDefault();
106 $event.stopPropagation();
109 private setValuesFromStore() {
110 if(!_.isNil(this.store.getState().service.serviceInstance) && !_.isNil(this.store.getState().service.serviceInstance[this.serviceModelId])){
111 const serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId];
112 this.numServicesToDeploy = serviceInstance.bulkSize;
113 this.serviceName = serviceInstance.instanceName || '<Automatically Assigned>';
114 this.serviceOrchStatus = serviceInstance.orchStatus || "";
115 this.isServiceFailed = serviceInstance.isFailed;
116 this.serviceStatusMessage = serviceInstance.statusMessage;
120 public editService(): void {
121 this._iframeService.addClassOpenModal(this.parentElementClassName);
122 this.dialogService.addDialog(GenericFormPopupComponent, {
123 type: PopupType.SERVICE,
125 type : PopupType.SERVICE,
126 isMacro : this.store.getState().service.serviceHierarchy[this.serviceModelId].service.vidNotions.instantiationType === 'Macro',
127 serviceId: this.serviceModelId,
128 popupService: this._servicePopupService
134 onDeleteUndoDeleteClick(){
135 this.cancelResume(this.serviceModelId);
136 this.isDeleted = !this.isDeleted;
137 this._drawingBoardHeaderService.deleteService(this.serviceModelId, this.isDeleted)
140 onResumeUndoResumeClick(){
141 this.cancelDelete(this.serviceModelId);
142 this.isResume = !this.isResume;
143 this._drawingBoardHeaderService.toggleResumeService(this.serviceModelId, this.isResume);
146 cancelDelete(serviceModelId: string) {
147 if (this.isDeleted) {
148 this.isDeleted = false;
149 this._drawingBoardHeaderService.deleteService(serviceModelId,this.isDeleted);
153 cancelResume(serviceModelId: string) {
155 this.isResume = false;
156 this._drawingBoardHeaderService.toggleResumeService(serviceModelId,this.isResume);
160 extractOwningEntityNameAccordingtoId(id:String): string {
161 let owningEntityName;
162 _.forEach(this.store.getState().service.categoryParameters.owningEntityList,(owningEntity: OwningEntity) => {
163 if (owningEntity.id === id) {
164 owningEntityName = owningEntity.name;
167 return owningEntityName;
170 extractServiceFields(): any {
171 let instanceFields : ServiceInstance;
172 instanceFields = this.store.getState().service.serviceInstance[this.serviceModelId];
173 if (instanceFields.action === ServiceInstanceActions.Create) {
174 instanceFields.subscriberName = this.store.getState().service.subscribers.find(sub => sub.id === instanceFields.globalSubscriberId).name;
175 instanceFields.owningEntityName = this.extractOwningEntityNameAccordingtoId(instanceFields.owningEntityId);
177 return _.omit(instanceFields,'optionalGroupMembersMap');
181 public deployService(): void {
182 let instanceFields = this.extractServiceFields();
183 if (this.mode !== DrawingBoardModes.RETRY_EDIT) {
184 instanceFields.rollbackOnFailure = instanceFields.rollbackOnFailure === 'true';
185 this.msoService.submitMsoTask(instanceFields).subscribe((result) => {
186 window.parent.postMessage("navigateToInstantiationStatus", '*');
189 this.msoService.retryBulkMsoTask(this.jobId, instanceFields).subscribe((result) => {
190 window.parent.postMessage("navigateToInstantiationStatus", '*');
196 let messageBoxData : MessageBoxData = new MessageBoxData(
197 "Delete Instantiation", // modal title
198 "You are about to stop the instantiation process of this service. \nAll data will be lost. Are you sure you want to stop?",
199 SdcUiCommon.ModalType.warning,
200 SdcUiCommon.ModalSize.medium,
202 {text:"Stop Instantiation", size:"large", callback: this.navigate.bind(this), closeModal:true},
203 {text:"Cancel", size:"medium", closeModal:true}
206 MessageBoxService.openModal.next(messageBoxData);
212 window.parent.postMessage("navigateTo", "*");