blob: ffc2e681a6bf92eba84fb884b6fa2c633fedc740 [file] [log] [blame]
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +03001import {Injectable} from '@angular/core';
2import {ServiceInfoModel, ServiceInfoUiModel} from '../shared/server/serviceInfo/serviceInfo.model';
Ittay Stern6f900cc2018-08-29 17:01:32 +03003import * as _ from 'lodash';
4import {Observable} from 'rxjs/Observable';
5import {NgRedux} from "@angular-redux/store";
6import {AppState} from "../shared/store/reducers";
7import {AaiService} from "../shared/services/aaiService/aai.service";
8import {ServiceModel} from "../shared/models/serviceModel";
9import {FeatureFlagsService, Features} from "../shared/services/featureFlag/feature-flags.service";
10import {DrawingBoardModes} from "../drawingBoard/service-planning/drawing-board.modes";
11import {updateDrawingBoardStatus} from "../shared/storeUtil/utils/global/global.actions";
12import {Router, UrlTree} from "@angular/router";
13import {of} from "rxjs";
14import {MsoService} from "../shared/services/msoService/mso.service";
Ittay Sterna8ebb742019-10-29 17:54:54 +020015
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +030016export let PENDING : string = "pending";
Ittay Stern6f900cc2018-08-29 17:01:32 +030017export let INPROGRESS : string = "in_progress";
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +030018export let PAUSE : string = "pause";
Ittay Stern6f900cc2018-08-29 17:01:32 +030019export let X_O : string = "x-circle-o";
20export let SUCCESS_CIRCLE : string = "success-circle-o";
Ittay Sterna8ebb742019-10-29 17:54:54 +020021export let STOPPED : string = "stop";
Ittay Stern6f900cc2018-08-29 17:01:32 +030022export let COMPLETED_WITH_ERRORS : string = "success_with_warning";
Ittay Sterna8ebb742019-10-29 17:54:54 +020023export let UNKNOWN : string = "question-mark-circle-o";
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +030024
25
26@Injectable()
27export class InstantiationStatusComponentService {
Ittay Stern6f900cc2018-08-29 17:01:32 +030028 constructor( private _aaiService: AaiService,
29 private _msoService: MsoService,
30 private _router : Router,
31 private _store: NgRedux<AppState>) {
32 }
33
34 generateServiceInfoDataMapping(arr: ServiceInfoModel[]) : { [serviceInstanceId: string]: ServiceInfoModel[]}{
35 let serviceInfoData: { [serviceInstanceId: string]: ServiceInfoModel[]; } = {};
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +030036 for(let item of arr){
Ittay Stern6f900cc2018-08-29 17:01:32 +030037 if(_.isNil(serviceInfoData[item.templateId])){
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +030038 serviceInfoData[item.templateId] = [item];
39 }else {
40 serviceInfoData[item.templateId].push(item);
41 }
42 }
43 return serviceInfoData;
44 }
45
Ittay Stern6f900cc2018-08-29 17:01:32 +030046 convertObjectToArray(arr: ServiceInfoModel[]) : Observable<ServiceInfoUiModel[]>{
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +030047 const obj = this.generateServiceInfoDataMapping(arr);
48 let index:number = 0;
49 let result = [];
50 for(let item in obj) {
51 obj[item].map(item => {
52 item['serviceStatus'] = this.getStatus(item.jobStatus);
53 item['serviceIndex'] = index;
54 });
55 index++;
56 result = result.concat(obj[item]);
57 }
58
59 console.log(result);
Ittay Stern6f900cc2018-08-29 17:01:32 +030060 return of(result);
61 }
62
63 isDrawingBoardViewEdit(serviceModel: ServiceModel): boolean {
64 if (!_.isNil(serviceModel.vidNotions) && !_.isNil(serviceModel.vidNotions.viewEditUI)
65 && serviceModel.vidNotions.viewEditUI !== 'legacy'){
66 return true;
67 }
68 return false;
69 }
70
71 open(item: ServiceInfoModel): void {
72 if (FeatureFlagsService.getFlagState(Features.FLAG_1902_VNF_GROUPING, this._store)) {
73 this._aaiService.getServiceModelById(item['serviceModelId']).subscribe((result)=>{
74 const serviceModel = new ServiceModel(result);
75
76 if (this.isDrawingBoardViewEdit(serviceModel)) {
77 this.navigateToNewViewEdit(item, DrawingBoardModes.EDIT);
78 return;
79 }
80
81 this.navigateToNewViewOnlyOrOldEditView(item);
82
83 });
84 }
85
86 /*this else is here only to save time in case we don't need to retrieve service model
87 it can be removed once it service model is always needed, and it doesn't save time*/
88 else {
89 this.navigateToNewViewOnlyOrOldEditView(item);
90 }
91 }
92
93 navigateToNewViewOnlyOrOldEditView(item: ServiceInfoModel) {
94 if (FeatureFlagsService.getFlagState(Features.FLAG_1902_NEW_VIEW_EDIT, this._store)) {
95 this.navigateToNewViewEdit(item, DrawingBoardModes.VIEW);
96 }
97 else {
98 this.navigateToOldViewEdit(item);
99 }
100 }
101
102 navigateToOldViewEdit(item: ServiceInfoModel) {
103 let query =
104 `subscriberId=${item.subscriberId}&` +
105 `subscriberName=${item.subscriberName}&` +
106 `serviceType=${item.serviceType}&` +
107 `serviceInstanceId=${item.serviceInstanceId}`;
108
109 this._store.dispatch(updateDrawingBoardStatus(DrawingBoardModes.OLD_VIEW_EDIT));
110 window.parent.location.assign('../../serviceModels.htm#/instantiate?' + query);
111 }
112
113 navigateToNewViewEdit(item: ServiceInfoModel, mode: DrawingBoardModes): void{
114 this._store.dispatch(updateDrawingBoardStatus(mode));
115 const viewEditUrlTree:UrlTree = this.getNewViewEditUrlTree(item, mode);
116 this._router.navigateByUrl(viewEditUrlTree);
117 window.parent.location.assign(this.getViewEditUrl(viewEditUrlTree));
118 }
119
120 getNewViewEditUrlTree(item: ServiceInfoModel, mode: DrawingBoardModes): UrlTree {
121 return this._router.createUrlTree(
122 ['/servicePlanning/' + mode],
123 {
124 queryParams:
125 {
126 serviceModelId: item.serviceModelId,
127 serviceInstanceId: item.serviceInstanceId,
128 serviceType : item.serviceType,
129 subscriberId : item.subscriberId,
130 jobId: item.jobId
131 }
132 });
133 }
134
135 getViewEditUrl(viewEditUrlTree:UrlTree): string {
136 return '../../serviceModels.htm#' + viewEditUrlTree.toString();
137
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300138 }
139
140 getStatus(status : string) : ServiceStatus {
Ittay Sternc439c812019-10-30 14:46:22 +0200141 switch(`${status}`.toUpperCase()) {
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300142 case 'PENDING' :
Ittay Stern6f900cc2018-08-29 17:01:32 +0300143 return new ServiceStatus(PENDING, 'primary', 'Pending: The action required will be sent as soon as possible.');
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300144 case 'IN_PROGRESS' :
Ittay Stern6f900cc2018-08-29 17:01:32 +0300145 return new ServiceStatus(INPROGRESS, 'primary', 'In-progress: the service is in process of the action required.');
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300146 case 'PAUSED' :
Ittay Stern6f900cc2018-08-29 17:01:32 +0300147 return new ServiceStatus(PAUSE, 'primary', 'Paused: Service has paused and waiting for your action.\n Select actions from the menu to the right.');
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300148 case 'FAILED' :
Ittay Stern6f900cc2018-08-29 17:01:32 +0300149 return new ServiceStatus(X_O, 'error', 'Failed: All planned actions have failed.');
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300150 case 'COMPLETED' :
Ittay Stern6f900cc2018-08-29 17:01:32 +0300151 return new ServiceStatus(SUCCESS_CIRCLE, 'success', 'Completed successfully: Service is successfully instantiated, updated or deleted.');
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300152 case 'STOPPED' :
Ittay Sterna8ebb742019-10-29 17:54:54 +0200153 return new ServiceStatus(STOPPED, 'error', 'Stopped: Due to previous failure, will not be instantiated.');
Ittay Stern6f900cc2018-08-29 17:01:32 +0300154 case 'COMPLETED_WITH_ERRORS' :
155 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.');
Ittay Sterna8ebb742019-10-29 17:54:54 +0200156
157 default:
158 return new ServiceStatus(UNKNOWN, 'primary', `Unexpected status: "${status}"`);
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300159 }
160 }
Ittay Stern6f900cc2018-08-29 17:01:32 +0300161
162 retry(item: ServiceInfoModel): void {
163 this.navigateToNewViewEdit(item, DrawingBoardModes.RETRY_EDIT);
164 }
Sonsino, Ofir (os0695)ff76b5e2018-07-10 15:57:37 +0300165}
166
167
168export class ServiceStatus {
169 iconClassName : string;
170 color : string;
171 tooltip : string;
172
173 constructor(_iconClassName : string, _color : string, _tooltip : string){
174 this.iconClassName = _iconClassName;
175 this.color = _color;
176 this.tooltip = _tooltip;
177 }
178}