aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/view-models/workspace/tabs/distribution/distribution-view-model.ts
blob: 002b16f63fc0894fe21d4c3a4ed53e75e5cbcd2e (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
99
100
101
102
103
104
105
106
107
108
109
110
111
'use strict';
import {Distribution, DistributionComponent, Service} from "app/models";
import {ModalsHandler, Dictionary} from "app/utils";
import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model";

interface IDistributionViewModel extends IWorkspaceViewModelScope {
    modalDistribution:ng.ui.bootstrap.IModalServiceInstance;
    service:Service;
    distributions:Array<Distribution>;
    showComponents(distribution:Distribution):void;
    markAsDeployed(distribution:Distribution):void;
    getStatusCount(distributionComponent:Array<DistributionComponent>):any;
    initDistributions():void;
    getUrlName(url:string):string;
    close():void;
    openDisributionStatusModal:Function;
}

export class DistributionViewModel {

    static '$inject' = [
        '$scope',
        'ModalsHandler'

    ];

    constructor(private $scope:IDistributionViewModel,
                private ModalsHandler:ModalsHandler) {
        this.initScope();
        this.$scope.setValidState(true);
        this.$scope.updateSelectedMenuItem();
    }

    private initScope = ():void => {
        this.$scope.service = <Service>this.$scope.component;


        // Open Distribution status modal
        this.$scope.openDisributionStatusModal = (distribution:Distribution, status:string):void => {
            this.ModalsHandler.openDistributionStatusModal(distribution, status, this.$scope.component).then(()=> {
                // OK
            }, ()=> {
                // ERROR
            });
        };


        this.$scope.showComponents = (distribution:Distribution):void => {
            let onError = (response) => {
                console.info('onError showComponents', response);
            };
            let onSuccess = (distributionComponents:Array<DistributionComponent>) => {
                distribution.distributionComponents = distributionComponents;
                distribution.statusCount = this.$scope.getStatusCount(distribution.distributionComponents);
                // distribution.components = this.aggregateDistributionComponent(distributionComponents);;
            };
            this.$scope.service.getDistributionsComponent(distribution.distributionID).then(onSuccess, onError);
        };

        this.$scope.getStatusCount = (distributionComponent:Array<DistributionComponent>):any => {
            return _.countBy(distributionComponent, 'status')
        };

        this.$scope.getUrlName = (url:string):string => {
            let urlName:string = _.last(url.split('/'));
            return urlName;
        };

        this.$scope.markAsDeployed = (distribution:Distribution):void => {
            let onError = (response) => {
                console.info('onError markAsDeployed', response);
            };
            let onSuccess = (result:any) => {
                distribution.deployementStatus = 'Deployed';
            };
            this.$scope.service.markAsDeployed(distribution.distributionID).then(onSuccess, onError);

        };

        this.$scope.initDistributions = ():void => {
            let onError = (response) => {
                console.info('onError initDistributions', response);
            };
            let onSuccess = (distributions:Array<Distribution>) => {
                this.$scope.distributions = distributions;
            };
            this.$scope.service.getDistributionsList().then(onSuccess, onError);
        };

        this.$scope.initDistributions();

    };


    private aggregateDistributionComponent = (distributionComponents:Array<DistributionComponent>):any => {
        let aggregateDistributions:Dictionary<string,Dictionary<string,Array<DistributionComponent>>> = new Dictionary<string,Dictionary<string,Array<DistributionComponent>>>();
        let tempAggregateDistributions:any = _.groupBy(distributionComponents, 'omfComponentID');
        let aa = new Dictionary<string,Array<DistributionComponent>>();

        let tempAggregate:any;
        _.forEach(tempAggregateDistributions, (distributionComponents:Array<DistributionComponent>, omfComponentID:string)=> {

            let urls:any = _.groupBy(distributionComponents, 'url');
            aggregateDistributions.setValue(omfComponentID, urls);
            // aggregateDistributions[omfComponentID] = ;

        });
        console.log(aggregateDistributions);
        return aggregateDistributions;
    };
}