1 import {Injectable} from "@angular/core";
2 import {ILevelNodeInfo} from "../models/basic.model.info";
3 import {ObjectToTreeService} from "../objectToTree.service";
4 import * as _ from "lodash";
7 export class ObjectToModelTreeService {
8 constructor(private _objectToTreeService: ObjectToTreeService) {
11 /***********************************************************
12 * return array of first level node with there child's
13 * @param serviceModel - The serviceHierarchy object
14 ************************************************************/
15 convertServiceHierarchyModelToTreeNodes(serviceModel): any[] {
17 const firstLevelOptions: ILevelNodeInfo[] = _this._objectToTreeService.getFirstLevelOptions();
19 for (let option of firstLevelOptions) {
20 _.forOwn(serviceModel[option.name], function (item, key) {
21 nodes.push(_this.addFirstLevelModel(serviceModel.service.uuid, key, item, item.type, serviceModel, option));
24 console.log('nodes', nodes);
29 /***********************************************************
30 * return node with all his child's
31 * @param name - Model name
32 * @param serviceId - service id
33 * @param currentModel - current Model object
34 * @param type - current Model type
35 * @param parentModel - current parent Model object
36 * @param levelNodeInfo - current level node information
37 ************************************************************/
38 private addFirstLevelModel(serviceId: string, name, currentModel, type, parentModel, levelNodeInfo: ILevelNodeInfo) {
39 let node = ObjectToModelTreeService.convertItemToTreeNode(serviceId, name, currentModel, type, null, levelNodeInfo);
40 node.children = this.addNextLevelNodes(serviceId, currentModel, parentModel, levelNodeInfo, node);
44 /***********************************************************
45 * return all the child's of node (is child exist)
46 * else return empty array.
47 * @param currentModel - current Model object
48 * @param parentModel - current parent Model object
49 * @param levelNodeInfo - current level node information
50 * @param parentNode - parent node.
51 ************************************************************/
52 addNextLevelNodes(serviceId: string, currentModel, parentModel, levelNodeInfo: ILevelNodeInfo, parentNode): any[] {
53 if (!_.isNil(levelNodeInfo.childName)) {
54 if (!_.isNil(currentModel[levelNodeInfo.childName])) {
55 let nextLevelNodeInfo = levelNodeInfo.getNextLevelObject.apply(this);
56 parentNode.children = Object.keys(currentModel[levelNodeInfo.childName]).map((key) =>
57 ObjectToModelTreeService.convertItemToTreeNode(serviceId, key, currentModel[levelNodeInfo.childName][key], levelNodeInfo.childName, currentModel, nextLevelNodeInfo));
61 return parentNode.children;
65 /***********************************************************
66 * return node with his properties
68 * @param name - model name
69 * @param currentModel - current model from serviceHierarchy
70 * @param valueType - model type
71 * @param parentModel - current parent model
72 * @param levelNodeInfo - current levelNodeInfo object
73 ************************************************************/
74 static convertItemToTreeNode(serviceId: string, name: string, currentModel: any, valueType: string, parentModel: string, levelNodeInfo: ILevelNodeInfo) {
76 id: currentModel.customizationUuid || currentModel.uuid,
77 modelCustomizationId : currentModel.customizationUuid,
78 modelVersionId: currentModel.uuid,
79 modelUniqueId : currentModel.customizationUuid || currentModel.uuid,
81 tooltip: levelNodeInfo.getTooltip(),
82 type: levelNodeInfo.getType(),
83 count: currentModel.count || 0,
84 max: currentModel.max || 1,
87 dynamicInputs: levelNodeInfo.updateDynamicInputsDataFromModel(currentModel),
88 isEcompGeneratedNaming: levelNodeInfo.isEcompGeneratedNaming(currentModel, parentModel)
91 node['onAddClick'] = (node, serviceId) => levelNodeInfo.onClickAdd(node, serviceId);
92 node['getNodeCount'] = (node, serviceId) => levelNodeInfo.getNodeCount(node, serviceId);
93 node['getMenuAction'] = (node, serviceId) => levelNodeInfo.getMenuAction(node, serviceId);
94 node['showNodeIcons'] = (node, serviceId) => levelNodeInfo.showNodeIcons(node, serviceId);
95 node['typeName'] = levelNodeInfo['typeName'];