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