aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/view-models/workspace/tabs/composition/tabs/service-consumption/service-consumption-view-model.ts
blob: 20e99b0d39608adcb08aa9aa327f0ce4c8d446ee (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
/*!
* Copyright © 2016-2018 European Support Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/


import {ICompositionViewModelScope} from "../../composition-view-model";
import {Service, PropertiesGroup, InputsGroup, ServiceInstanceObject, InterfaceModel, InputBEModel} from 'app/models';
import {ComponentGenericResponse} from "app/ng2/services/responses/component-generic-response";
import {ServiceServiceNg2} from "app/ng2/services/component-services/service.service";

interface IServiceConsumptionViewModelScope extends ICompositionViewModelScope {
    service: Service;
    instancesMappedList: Array<ServiceInstanceObject>;
    componentInstancesProperties: PropertiesGroup;
    componentInstancesInputs: InputsGroup;
    componentInstancesInterfaces: Map<string, Array<InterfaceModel>>;
    componentInputs: Array<InputBEModel>;
}


export class ServiceConsumptionViewModel {

    static '$inject' = [
        '$scope',
        'ServiceServiceNg2'
    ];

    constructor(private $scope:IServiceConsumptionViewModelScope, private ServiceServiceNg2:ServiceServiceNg2) {
        this.$scope.service = <Service>this.$scope.currentComponent;
        this.initInstances();
        this.initScope();
    }

    private initInstances = ():void => {
        this.ServiceServiceNg2.getServiceConsumptionData(this.$scope.service).subscribe((genericResponse:ComponentGenericResponse) => {
            this.$scope.componentInstancesProperties = genericResponse.componentInstancesProperties;
            this.$scope.componentInstancesInputs = genericResponse.componentInstancesInputs;
            this.$scope.componentInstancesInterfaces = genericResponse.componentInstancesInterfaces;
            this.$scope.componentInputs = genericResponse.inputs;
            this.updateInstanceAttributes();
        });
    }

    private updateInstanceAttributes = ():void => {
        if (this.$scope.isComponentInstanceSelected() && this.$scope.componentInstancesProperties) {
            this.$scope.instancesMappedList = this.$scope.service.componentInstances.map(coInstance => new ServiceInstanceObject({
                id: coInstance.uniqueId,
                name: coInstance.name,
                properties: this.$scope.componentInstancesProperties[coInstance.uniqueId] || [],
                inputs: this.$scope.componentInstancesInputs[coInstance.uniqueId] || [],
                interfaces: this.$scope.componentInstancesInterfaces[coInstance.uniqueId] || []
            }));
        }
    }

    private initScope = ():void => {
        this.$scope.$watch('currentComponent.selectedInstance', ():void => {
            this.updateInstanceAttributes();
        });

        this.$scope.registerCreateInstanceEvent(() => {
            this.initInstances();
        });

        this.$scope.$on('$destroy', this.$scope.unregisterCreateInstanceEvent);
    }
}