private getGroupNodes()

in src/Sfx/App/Scripts/Services/ClusterTreeService.ts [98:175]


        private getGroupNodes(): angular.IPromise<ITreeNode[]> {
            //let cm: ClusterManifest = new ClusterManifest(this.data);
            let cmPromise = this.cm.ensureInitialized(false);

            let appsNode;
            let getAppsPromise = this.data.getApps().then(apps => {
                appsNode = {
                    nodeId: IdGenerator.appGroup(),
                    displayName: () => "Applications",
                    childrenQuery: () => this.getApplicationTypes(),
                    badge: () => apps.healthState,
                    selectAction: () => this.routes.navigate(() => apps.viewPath),
                    alwaysVisible: true
                };
            });

            let nodesNode;
            let getNodesPromise = this.data.getNodes().then(nodes => {
                nodesNode = {
                    nodeId: IdGenerator.nodeGroup(),
                    displayName: () => "Nodes",
                    selectAction: () => this.routes.navigate(() => nodes.viewPath),
                    childrenQuery: () => this.getNodes(),
                    badge: () => nodes.healthState,
                    listSettings: this.settings.getNewOrExistingTreeNodeListSettings(nodes.viewPath),
                    alwaysVisible: true
                };
            });

            let systemAppNode;
            let systemNodePromise = this.data.getSystemApp().then(systemApp => {
                systemAppNode = {
                    nodeId: IdGenerator.systemAppGroup(),
                    displayName: () => Constants.SystemAppTypeName,
                    selectAction: () => this.routes.navigate(() => systemApp.viewPath),
                    childrenQuery: () => this.getServices(Constants.SystemAppId),
                    badge: () => systemApp.healthState,
                    alwaysVisible: true,
                    addHealthStateFiltersForChildren: (clusterHealthChunkQueryDescription: IClusterHealthChunkQueryDescription) => {
                        // System app node is expanded, modify health filters to include system services
                        systemApp.addHealthStateFiltersForChildren(clusterHealthChunkQueryDescription);
                    },
                    mergeClusterHealthStateChunk: (clusterHealthChunk: IClusterHealthChunk) => {
                        return systemApp.services.mergeClusterHealthStateChunk(clusterHealthChunk);
                    }
                };
            }).catch(err => {
                systemAppNode = null;
            });



            return cmPromise.then( () => {
                //check to see if network inventory manager is enabled and if SFX should display Network information
                if (this.cm.isNetworkInventoryManagerEnabled) {
                    let networkNode;
                    let getNetworkPromise = this.data.getNetworks(true).then(net => {
                        networkNode = {
                            nodeId: IdGenerator.networkGroup(),
                            displayName: () => "Networks",
                            childrenQuery: () => this.getNetworks(),
                            selectAction: () => this.routes.navigate(() => net.viewPath),
                            alwaysVisible: true
                        };
                    });
                    return this.$q.all([getAppsPromise, getNodesPromise, getNetworkPromise, systemNodePromise]).then(() => {
                        return [appsNode, nodesNode, networkNode, systemAppNode];
                    });
                }
                return this.$q.all([getAppsPromise, getNodesPromise, systemNodePromise]).then(() => {
                    let nodes = [appsNode, nodesNode];
                    if(systemAppNode) {
                        nodes.push(systemAppNode);
                    }
                    return nodes;
                });
            });
        }