summaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/ng2/pages/composition/palette/services/palette.service.ts
blob: 7587c5206ffb4af92bc575b66332b7ae23228e2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import { HttpClient, HttpParams } from '@angular/common/http';
import { Inject, Injectable } from '@angular/core';
import { LeftPaletteComponent, LeftPaletteMetadataTypes } from 'app/models/components/displayComponent';
import { GroupMetadata } from 'app/models/group-metadata';
import { PolicyMetadata } from 'app/models/policy-metadata';
import { SdcConfigToken } from 'app/ng2/config/sdc-config.config';
import { ISdcConfig } from 'app/ng2/config/sdc-config.config.factory';
import { WorkspaceService } from 'app/ng2/pages/workspace/workspace.service';
import 'rxjs/add/observable/forkJoin';
import { Observable } from 'rxjs/Rx';
import Dictionary = _.Dictionary;



@Injectable()
export class CompositionPaletteService {

    protected baseUrl = '';

    private leftPaletteComponents: Dictionary<Dictionary<LeftPaletteComponent[]>>;
    private facadeUrl: string;
    constructor(protected http: HttpClient, @Inject(SdcConfigToken) sdcConfig: ISdcConfig, private workspaceService: WorkspaceService) {
        this.baseUrl = sdcConfig.api.root + sdcConfig.api.component_api_root;
        this.facadeUrl = sdcConfig.api.uicache_root + sdcConfig.api.GET_uicache_left_palette;

    }

    public subscribeToLeftPaletteElements(next, error) {

        let params = new HttpParams();
        params = params.append('internalComponentType', this.workspaceService.getMetadataType());

        const loadInstances = this.http.get(this.facadeUrl, {params});
        const loadGroups = this.http.get(this.baseUrl + 'groupTypes', {params});
        const loadPolicies = this.http.get(this.baseUrl + 'policyTypes', {params});

        Observable.forkJoin(
            loadInstances, loadGroups, loadPolicies
        ).subscribe( ([resInstances, resGrouops, resPolicies]) => {
            const combinedDictionary = this.combineResoponses(resInstances, resGrouops, resPolicies);
            this.leftPaletteComponents = combinedDictionary;
            next(this.leftPaletteComponents);
        });
    }

    public getLeftPaletteElements = (): Dictionary<Dictionary<LeftPaletteComponent[]>> => {
        return this.leftPaletteComponents;
    }


    public convertPoliciesOrGroups = (paletteListResult, type: string ) => {
        const components: LeftPaletteComponent[] = [];

        if (type === 'Policies') {
            _.forEach(paletteListResult, (policyMetadata: PolicyMetadata) => {
                components.push(new LeftPaletteComponent(LeftPaletteMetadataTypes.Policy, policyMetadata));
            });
            return {
                Policies: components
            };
        }

        if (type === 'Groups') {
            _.forEach(paletteListResult, (groupMetadata: GroupMetadata) => {
                const item = new LeftPaletteComponent(LeftPaletteMetadataTypes.Group, groupMetadata);
                components.push(item);
            });
            return {
                Groups: components
            };
        }

        return {};
    }

    private combineResoponses(resInstances: object, resGrouops: object, resPolicies: object) {
        const retValObject = {};
        // Generic will be the 1st category in the left Pallete
        if (resInstances['Generic']) {
            retValObject['Generic'] = resInstances['Generic'];
        }
        // Add all other categories
        for (const category in resInstances) {
            if (category === 'Generic') {
                continue;
            }
            retValObject[category] = resInstances[category];
        }

        // Add Groups
        retValObject["Groups"] = this.convertPoliciesOrGroups(resGrouops, 'Groups');

        // Add policies
        retValObject["Policies"] = this.convertPoliciesOrGroups(resPolicies, 'Policies');

        return retValObject;
    }
}