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