b1eb10937a303bc8a45244b4b2460ca8e00e4200
[vid.git] / vid-webpack-master / src / app / drawingBoard / service-planning / objectsToTree / models / relatedVnfMember / relatedVnfMember.info.model.ts
1 import {ILevelNodeInfo} from "../basic.model.info";
2 import {SharedTreeService} from "../../shared.tree.service";
3 import {NgRedux} from "@angular-redux/store";
4 import {AppState} from "../../../../../shared/store/reducers";
5 import * as _ from "lodash";
6 import {ITreeNode} from "angular-tree-component/dist/defs/api";
7 import {AvailableNodeIcons} from "../../../available-models-tree/available-models-tree.service";
8 import {DynamicInputsService} from "../../dynamicInputs.service";
9 import {
10   deleteActionRelatedVnfMemberInstance,
11   removeRelatedVnfMemberInstance,
12   undoDeleteActionRelatedVnfMemberInstance
13 } from "../../../../../shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.actions";
14 import {VnfInstance} from "../../../../../shared/models/vnfInstance";
15 import {VNFModel} from "../../../../../shared/models/vnfModel";
16 import {VnfTreeNode} from "../../../../../shared/models/vnfTreeNode";
17 import {InputType} from "../../../../../shared/models/inputTypes";
18
19 export class RelatedVnfMemberInfoModel implements ILevelNodeInfo {
20   constructor(private _sharedTreeService: SharedTreeService,
21               private _dynamicInputsService : DynamicInputsService,
22               private _store: NgRedux<AppState>) {
23   }
24
25   name: string = 'vnfs';
26   type: string = 'relatedVnfMember';
27   typeName: string = 'VNF';
28
29   /***********************************************************
30    * return if user should provide instance name or not.
31    * @param currentModel - current Model object
32    ************************************************************/
33   isUserProvidedNaming = (currentModel): boolean => {
34     const ecompGeneratedNaming = currentModel.properties.ecomp_generated_naming;
35     return ecompGeneratedNaming !== undefined && ecompGeneratedNaming === "false";
36   };
37
38   /***********************************************************
39    * return model dynamic inputs
40    * @param currentModel - current Model object
41    ************************************************************/
42   updateDynamicInputsDataFromModel = (currentModel): any => {
43     let displayInputs;
44     return _.isEmpty(displayInputs) ? [] : this._dynamicInputsService.getArbitraryInputs(displayInputs);
45   };
46
47   /***********************************************************
48    * return vnf model
49    * @param vnfModelId - current Model id
50    * @param instance - vnf instance
51    * @param serviceHierarchy - serviceHierarchy
52    ************************************************************/
53   getModel = (vnfModelId: string, instance: VnfInstance, serviceHierarchy): VNFModel => {
54     const originalModelName = instance.originalName ? instance.originalName : vnfModelId;
55     return new VNFModel(serviceHierarchy[this.name][originalModelName]);
56   };
57
58
59   /***********************************************************
60    * return vnf instance tree node
61    * @param instance - vnf instance
62    * @param model - vnf model
63    * @param parentModel
64    * @param storeKey - store key if exist
65    ************************************************************/
66   createInstanceTreeNode = (instance: VnfInstance, model: VNFModel, parentModel, storeKey: string): VnfTreeNode => {
67     let node = new VnfTreeNode(instance, model, storeKey);
68     node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
69     node.typeName = this.typeName;
70     node.menuActions = this.getMenuAction(<any>node, model.uuid);
71     node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
72     node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage: "";
73     node = this._sharedTreeService.addingStatusProperty(node);
74     return node;
75   };
76
77   /***********************************************************
78    * return next level object (null because is last level)
79    ************************************************************/
80   getNextLevelObject(): any {
81     return null;
82   }
83
84   /***********************************************************
85    * return if instance has missing data
86    * @param instance - vnf instance
87    * @param dynamicInputs
88    * @param isUserProvidedNaming
89    ************************************************************/
90   hasMissingData(instance, dynamicInputs: any, isUserProvidedNaming: boolean): boolean {
91     return this._sharedTreeService.hasMissingData(instance, dynamicInputs, isUserProvidedNaming, [InputType.LCP_REGION, InputType.TENANT, InputType.PLATFORM]);
92   }
93
94   getTooltip = (): string => 'VF';
95
96   getType = (): string => 'VF';
97
98   /***********************************************************
99    * doesn't have option from DrawingBoard model tree
100    ************************************************************/
101   onClickAdd(node, serviceModelId: string): void {}
102
103   /***********************************************************
104    * doesn't have option from DrawingBoard model tree
105    ************************************************************/
106   getNodeCount(node: ITreeNode, serviceModelId: string): number {return 0;}
107
108   /***********************************************************
109    * doesn't have option from DrawingBoard model tree
110    ************************************************************/
111   showNodeIcons(node: ITreeNode, serviceModelId: string): AvailableNodeIcons {
112     return new AvailableNodeIcons(false, false);
113   }
114
115   getMenuAction(node: ITreeNode, serviceModelId: string): { [methodName: string]: { method: Function, visible: Function, enable: Function }} {
116     return <any>{
117       remove: {
118         method: (node, serviceModelId) => {
119           this._store.dispatch(removeRelatedVnfMemberInstance(node.parent.data.vnfGroupStoreKey, node.data.vnfStoreKey, serviceModelId));
120         },
121         visible: (node) => this._sharedTreeService.shouldShowRemoveAndEdit(node),
122         enable: (node) => this._sharedTreeService.shouldShowRemoveAndEdit(node)
123       },
124       delete : {
125         method : (node, serviceModelId) => {
126           this._store.dispatch(deleteActionRelatedVnfMemberInstance(node.parent.data.vnfGroupStoreKey, node.data.vnfStoreKey, serviceModelId));
127         },
128         visible: (node) => this._sharedTreeService.shouldShowDelete(node),
129         enable: (node) => this._sharedTreeService.shouldShowDelete(node)
130       },
131       undoDelete : {
132         method : (node, serviceModelId) => {
133           this._store.dispatch(undoDeleteActionRelatedVnfMemberInstance(node.parent.data.vnfGroupStoreKey , node.data.vnfStoreKey, serviceModelId));
134
135         },
136         visible: (node) => this._sharedTreeService.shouldShowUndoDelete(node),
137         enable: (node, serviceModelId) => this._sharedTreeService.shouldShowUndoDelete(node) && this._sharedTreeService.shouldShowDelete(node.parent) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
138       }
139     }
140   }
141
142   isEcompGeneratedNaming = (currentModel): boolean => {
143     const ecompGeneratedNaming = currentModel.properties.ecomp_generated_naming;
144     return ecompGeneratedNaming === "true";
145   };
146
147
148   updatePosition(that , node, instanceId): void {
149     // TODO
150   }
151
152   getNodePosition(instance): number {
153     return null;
154   }
155
156   onSelectedNode(node: ITreeNode): void {
157   }
158 }