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 store : NgRedux<AppState>;
43 drawingBoardPermissions : DrawingBoardPermissions;
44 drawingBoardHeaderService : DrawingBoardHeaderService;
45 isServiceFailed: boolean;
46 serviceStatusMessage: string;
47 constructor(private _contextMenuService: ContextMenuService, private dialogService: DialogService,
48 private _iframeService : IframeService,
49 private route: ActivatedRoute, private msoService: MsoService,
50 private _servicePopupService : ServicePopupService,
51 private _drawingBoardHeaderService : DrawingBoardHeaderService,
52 private _store: NgRedux<AppState>,
53 private _drawingBoardPermissions : DrawingBoardPermissions) {
55 this.drawingBoardPermissions = _drawingBoardPermissions;
56 this.drawingBoardHeaderService = _drawingBoardHeaderService;
57 this.mode = (!_.isNil(this.route.routeConfig.path) && this.route.routeConfig.path !== "") ? this.route.routeConfig.path as DrawingBoardModes : DrawingBoardModes.CREATE;
60 .subscribe((params) => {
61 this.serviceModelId = params['serviceModelId'];
62 this.jobId = params['jobId'];
63 if (_.has(this.store.getState().service.serviceHierarchy, this.serviceModelId)) {
64 this.setValuesFromStore();
65 this.store.subscribe(() => {
66 this.setValuesFromStore();
73 @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
75 editViewEdit(): void {
76 window.parent.location.assign(this._drawingBoardHeaderService.generateOldViewEditPath());
79 isPermitted() : boolean {
80 return this.drawingBoardPermissions.isEditPermitted;
83 getModeName():string {
85 case DrawingBoardModes.CREATE:
87 case DrawingBoardModes.VIEW:
88 case DrawingBoardModes.RETRY:
90 case DrawingBoardModes.EDIT:
91 case DrawingBoardModes.RETRY_EDIT:
98 public onContextMenu($event: MouseEvent, item: any): void {
99 this._contextMenuService.show.next({
100 contextMenu: this.contextMenu,
104 $event.preventDefault();
105 $event.stopPropagation();
108 private setValuesFromStore() {
109 if(!_.isNil(this.store.getState().service.serviceInstance) && !_.isNil(this.store.getState().service.serviceInstance[this.serviceModelId])){
110 const serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId];
111 this.numServicesToDeploy = serviceInstance.bulkSize;
112 this.serviceName = serviceInstance.instanceName || '<Automatically Assigned>';
113 this.serviceOrchStatus = serviceInstance.orchStatus || "";
114 this.isServiceFailed = serviceInstance.isFailed;
115 this.serviceStatusMessage = serviceInstance.statusMessage;
119 public editService(): void {
120 this._iframeService.addClassOpenModal(this.parentElementClassName);
121 this.dialogService.addDialog(GenericFormPopupComponent, {
122 type: PopupType.SERVICE,
124 type : PopupType.SERVICE,
125 isMacro : this.store.getState().service.serviceHierarchy[this.serviceModelId].service.instantiationType === 'Macro',
126 serviceId: this.serviceModelId,
127 popupService: this._servicePopupService
133 extractOwningEntityNameAccordingtoId(id:String): string {
134 let owningEntityName;
135 _.forEach(this.store.getState().service.categoryParameters.owningEntityList,(owningEntity: OwningEntity) => {
136 if (owningEntity.id === id) {
137 owningEntityName = owningEntity.name;
140 return owningEntityName;
143 extractServiceFields(): any {
144 let instanceFields : ServiceInstance;
145 instanceFields = this.store.getState().service.serviceInstance[this.serviceModelId];
146 if (instanceFields.action === ServiceInstanceActions.Create) {
147 instanceFields.subscriberName = this.store.getState().service.subscribers.find(sub => sub.id === instanceFields.globalSubscriberId).name;
148 instanceFields.owningEntityName = this.extractOwningEntityNameAccordingtoId(instanceFields.owningEntityId);
150 return _.omit(instanceFields,'optionalGroupMembersMap');
154 public deployService(): void {
155 let instanceFields = this.extractServiceFields();
156 if (this.mode !== DrawingBoardModes.RETRY_EDIT) {
157 instanceFields.rollbackOnFailure = instanceFields.rollbackOnFailure === 'true';
158 this.msoService.submitMsoTask(instanceFields).subscribe((result) => {
159 window.parent.postMessage("navigateToInstantiationStatus", '*');
162 this.msoService.retryBulkMsoTask(this.jobId, instanceFields).subscribe((result) => {
163 window.parent.postMessage("navigateToInstantiationStatus", '*');
169 let messageBoxData : MessageBoxData = new MessageBoxData(
170 "Delete Instantiation", // modal title
171 "You are about to stop the instantiation process of this service. \nAll data will be lost. Are you sure you want to stop?",
172 SdcUiCommon.ModalType.warning,
173 SdcUiCommon.ModalSize.medium,
175 {text:"Stop Instantiation", size:"large", callback: this.navigate.bind(this), closeModal:true},
176 {text:"Cancel", size:"medium", closeModal:true}
179 MessageBoxService.openModal.next(messageBoxData);
185 window.parent.postMessage("navigateTo", "*");