1 import {Injectable} from '@angular/core';
2 import {ServiceInfoModel, ServiceInfoUiModel} from '../shared/server/serviceInfo/serviceInfo.model';
3 import * as _ from 'lodash';
4 import {Observable} from 'rxjs/Observable';
5 import {NgRedux} from "@angular-redux/store";
6 import {AppState} from "../shared/store/reducers";
7 import {AaiService} from "../shared/services/aaiService/aai.service";
8 import {ServiceModel} from "../shared/models/serviceModel";
9 import {FeatureFlagsService, Features} from "../shared/services/featureFlag/feature-flags.service";
10 import {DrawingBoardModes} from "../drawingBoard/service-planning/drawing-board.modes";
11 import {updateDrawingBoardStatus} from "../shared/storeUtil/utils/global/global.actions";
12 import {Router, UrlTree} from "@angular/router";
13 import {of} from "rxjs";
14 import {MsoService} from "../shared/services/msoService/mso.service";
15 import {ServiceAction} from "../shared/models/serviceInstanceActions";
16 import {InstantiationBase} from "../shared/models/InstantiationBase";
18 export let PENDING : string = "pending";
19 export let INPROGRESS : string = "in_progress";
20 export let PAUSE : string = "pause";
21 export let X_O : string = "x-circle-o";
22 export let SUCCESS_CIRCLE : string = "success-circle-o";
23 export let STOPPED : string = "stop";
24 export let COMPLETED_WITH_ERRORS : string = "success_with_warning";
25 export let PAUSE_UPON_COMPLETION : string = "stopped-upon-success";
26 export let UNKNOWN : string = "question-mark-circle-o";
30 export class InstantiationStatusComponentService {
31 constructor( private _aaiService: AaiService,
32 private _msoService: MsoService,
33 private _router : Router,
34 private _store: NgRedux<AppState>,
35 private _featureFlagsService:FeatureFlagsService) {
38 generateServiceInfoDataMapping(arr: ServiceInfoModel[]) : { [serviceInstanceId: string]: ServiceInfoModel[]}{
39 let serviceInfoData: { [serviceInstanceId: string]: ServiceInfoModel[]; } = {};
41 if(_.isNil(serviceInfoData[item.templateId])){
42 serviceInfoData[item.templateId] = [item];
44 serviceInfoData[item.templateId].push(item);
47 return serviceInfoData;
50 convertObjectToArray(arr: ServiceInfoModel[]) : Observable<ServiceInfoUiModel[]>{
51 const obj = this.generateServiceInfoDataMapping(arr);
54 for(let item in obj) {
55 obj[item].map(item => {
56 item['serviceStatus'] = this.getStatus(item.jobStatus);
57 item['serviceIndex'] = index;
60 result = result.concat(obj[item]);
67 isDrawingBoardViewEdit(serviceModel: ServiceModel): boolean {
68 if (!_.isNil(serviceModel.vidNotions) && !_.isNil(serviceModel.vidNotions.viewEditUI)
69 && serviceModel.vidNotions.viewEditUI !== 'legacy'){
75 open(item: ServiceInfoModel): void {
76 if (this._featureFlagsService.getFlagState(Features.FLAG_1902_VNF_GROUPING)) {
77 this._aaiService.getServiceModelById(item['serviceModelId']).subscribe((result)=>{
78 const serviceModel = new ServiceModel(result);
80 if (this.isDrawingBoardViewEdit(serviceModel)) {
81 this.navigateToNewViewEdit(item, DrawingBoardModes.EDIT);
85 this.navigateToNewViewOnlyOrOldEditView(item);
90 /*this else is here only to save time in case we don't need to retrieve service model
91 it can be removed once it service model is always needed, and it doesn't save time*/
93 this.navigateToNewViewOnlyOrOldEditView(item);
97 navigateToNewViewOnlyOrOldEditView(item: ServiceInfoModel) {
98 if (this._featureFlagsService.getFlagState(Features.FLAG_1902_NEW_VIEW_EDIT)) {
99 this.navigateToNewViewEdit(item, DrawingBoardModes.VIEW);
102 this.navigateToOldViewEdit(item);
106 navigateToOldViewEdit(item: ServiceInfoModel) {
108 `subscriberId=${item.subscriberId}&` +
109 `subscriberName=${item.subscriberName}&` +
110 `serviceType=${item.serviceType}&` +
111 `serviceInstanceId=${item.serviceInstanceId}`;
113 this._store.dispatch(updateDrawingBoardStatus(DrawingBoardModes.OLD_VIEW_EDIT));
114 window.parent.location.assign('../../serviceModels.htm#/instantiate?' + query);
117 navigateToNewViewEdit(item: InstantiationBase, mode: DrawingBoardModes): void {
118 this._store.dispatch(updateDrawingBoardStatus(mode));
119 const viewEditUrlTree:UrlTree = this.getNewViewEditUrlTree(item, mode);
120 this._router.navigateByUrl(viewEditUrlTree);
121 window.parent.location.assign(this.getViewEditUrl(viewEditUrlTree));
124 getNewViewEditUrlTree(item: InstantiationBase, mode: DrawingBoardModes): UrlTree {
125 return this._router.createUrlTree(
126 ['/servicePlanning/' + mode],
129 mode==DrawingBoardModes.RECREATE ?
130 this.getRecreateQueryParams(item) :
131 this.getDefaultViewEditQueryParams(<ServiceInfoModel> item)
135 private getDefaultViewEditQueryParams(item: ServiceInfoModel) {
137 serviceModelId: item.serviceModelId,
138 serviceInstanceId: item.serviceInstanceId,
139 serviceType: item.serviceType,
140 subscriberId: item.subscriberId,
145 private getRecreateQueryParams(item: InstantiationBase) {
147 serviceModelId: item.serviceModelId,
152 getViewEditUrl(viewEditUrlTree:UrlTree): string {
153 return '../../serviceModels.htm#' + viewEditUrlTree.toString();
156 getStatus(status : string) : ServiceStatus {
157 switch(`${status}`.toUpperCase()) {
159 return new ServiceStatus(PENDING, 'primary', 'Pending: The action required will be sent as soon as possible.');
161 return new ServiceStatus(INPROGRESS, 'primary', 'In-progress: the service is in process of the action required.');
163 return new ServiceStatus(PAUSE, 'primary', 'Paused: Service has paused and waiting for your action.\n Select actions from the menu to the right.');
165 return new ServiceStatus(X_O, 'error', 'Failed: All planned actions have failed.');
167 return new ServiceStatus(SUCCESS_CIRCLE, 'success', 'Completed successfully: Service is successfully instantiated, updated or deleted.');
169 return new ServiceStatus(STOPPED, 'error', 'Stopped: Due to previous failure, will not be instantiated.');
170 case 'COMPLETED_WITH_ERRORS' :
171 return new ServiceStatus(COMPLETED_WITH_ERRORS, 'success', 'Completed with errors: some of the planned actions where successfully committed while other have not.\n Open the service to check it out.');
172 case 'COMPLETED_AND_PAUSED' :
173 return new ServiceStatus(PAUSE_UPON_COMPLETION, 'default','Pause upon completion. you may resume the instantiation.\n Open the service to check it out.' );
175 return new ServiceStatus(UNKNOWN, 'primary', `Unexpected status: "${status}"`);
179 retry(item: ServiceInfoModel): void {
180 this.navigateToNewViewEdit(item, DrawingBoardModes.RETRY_EDIT);
183 recreate(item: ServiceInfoModel): void {
184 this.navigateToNewViewEdit(item, DrawingBoardModes.RECREATE);
187 isRecreateEnabled(item: ServiceInfoModel): boolean {
188 return item.action === ServiceAction.INSTANTIATE;
191 isRecreateVisible(): boolean {
192 return this._featureFlagsService.getFlagState(Features.FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE);
195 isNewViewEditVisible(): boolean {
196 return this._featureFlagsService.getFlagState(Features.FLAG_2006_NEW_VIEW_EDIT_BUTTON_IN_INSTANTIATION_STATUS);
199 forwardToNewViewEdit(item: ServiceInfoModel): void {
200 this.navigateToNewViewEdit(item, DrawingBoardModes.EDIT);
205 export class ServiceStatus {
206 iconClassName : string;
210 constructor(_iconClassName : string, _color : string, _tooltip : string){
211 this.iconClassName = _iconClassName;
213 this.tooltip = _tooltip;