aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/services/data-types-service.ts
blob: 1c6ac07fdc5e21fcf41dd256b44be8a2e6e57e41 (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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
'use strict';
import { DataTypePropertyModel } from "../models/data-type-properties";
import {ComponentInstance, InputModel, DataTypesMap, PropertyModel, InputPropertyBase, IAppConfigurtaion, SchemaProperty} from "../models";
import {PROPERTY_DATA} from "../utils/constants";

export interface IDataTypesService {

    dataTypes:DataTypesMap; //Data type map
    selectedPropertiesName:string;
    selectedInput:PropertyModel;
    alreadySelectedProperties:Array<InputPropertyBase>;
    selectedInstance:ComponentInstance;
    selectedComponentInputs:Array<InputModel>;
    //declare methods
    initDataTypes():void;
    getAllDataTypes():DataTypesMap;
    getFirsLevelOfDataTypeProperties(dataTypeName:string):Array<DataTypePropertyModel>;
    isDataTypeForSchemaType(property:SchemaProperty):boolean;
    isDataTypeForPropertyType(property:PropertyModel):boolean;
    isDataTypeForDataTypePropertyType(property:DataTypePropertyModel):boolean;
}

export class DataTypesService implements IDataTypesService {

    static '$inject' = [
        'sdcConfig',
        '$q',
        '$http'
    ];

    constructor(private sdcConfig:IAppConfigurtaion,
                private $q:ng.IQService,
                private $http:ng.IHttpService) {

    }

    dataTypes:DataTypesMap; //Data type map
    selectedPropertiesName:string;
    selectedInput:PropertyModel;
    alreadySelectedProperties:Array<InputPropertyBase>;
    selectedInstance:ComponentInstance;
    selectedComponentInputs:Array<InputModel>;

    public initDataTypes = ():void => {
        this.$http({
            url: this.sdcConfig.api.root + this.sdcConfig.api.component_api_root + "dataTypes",
            method: "get"
        }).then((response:any) => {
            this.dataTypes = response.data;
            delete this.dataTypes['tosca.datatypes.Root'];
        });
    };

    public getAllDataTypes = ():DataTypesMap => {
        return this.dataTypes;
    };

    //if the dt derived from simple- return the first parent type, else- return null
    private getTypeForDataTypeDerivedFromSimple = (dataTypeName:string):string => {
        /////////temporary hack for tosca primitives///////////////////////
        if (!this.dataTypes[dataTypeName]) {
            return 'string';
        }
        ///////////////////////////////////////////////////////////////////
        if (this.dataTypes[dataTypeName].derivedFromName == "tosca.datatypes.Root" || this.dataTypes[dataTypeName].properties) {
            return null;
        }
        if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.dataTypes[dataTypeName].derivedFromName) > -1) {
            return this.dataTypes[dataTypeName].derivedFromName
        }
        return this.getTypeForDataTypeDerivedFromSimple(this.dataTypes[dataTypeName].derivedFromName);
    };


    //return list of data type properties and all its parents properties
    //(not include the properties of its properties, in case this data type has not primitive properties)
    public getFirsLevelOfDataTypeProperties = (dataTypeName:string):Array<DataTypePropertyModel> => {
        let properties = this.dataTypes[dataTypeName].properties || [];
        if (this.dataTypes[dataTypeName].derivedFromName != "tosca.datatypes.Root") {
            properties = this.getFirsLevelOfDataTypeProperties(this.dataTypes[dataTypeName].derivedFromName).concat(properties);
        }
        return properties;
    };

    //return false when type= data type (=not simple type) that not derived from simple type
    public isDataTypeForSchemaType = (property:SchemaProperty):boolean=> {
        property.simpleType = "";
        if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1) {
            return false;
        }
        let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
        if (simpleType) {
            property.simpleType = simpleType;
            return false;
        }
        return true;
    };

    public isDataTypeForPropertyType = (property:PropertyModel):boolean=> {
        property.simpleType = "";
        if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1) {
            return false;
        }
        let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
        if (simpleType) {
            property.simpleType = simpleType;
            return false;
        }
        return true;
    };


    public isDataTypeForDataTypePropertyType = (property:DataTypePropertyModel):boolean=> {
        property.simpleType = "";
        if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1) {
            return false;
        }
        let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
        if (simpleType) {
            property.simpleType = simpleType;
            return false;
        }
        return true;
    };
}