2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
22 import {DataTypePropertyModel} from "../models/data-type-properties";
33 import {PROPERTY_DATA} from "../utils/constants";
35 export interface IDataTypesService {
37 dataTypes:DataTypesMap; //Data type map
38 selectedPropertiesName:string;
39 selectedInput:PropertyModel;
40 alreadySelectedProperties:Array<InputPropertyBase>;
41 selectedInstance:ComponentInstance;
42 selectedComponentInputs:Array<InputModel>;
44 loadDataTypesCache(modelName:string):void;
45 findAllDataTypesByModel(modelName: string): void;
46 getAllDataTypes():DataTypesMap;
47 getFirsLevelOfDataTypeProperties(dataTypeName:string):Array<DataTypePropertyModel>;
48 isDataTypeForSchemaType(property:SchemaProperty):boolean;
49 isDataTypeForPropertyType(property:PropertyModel):boolean;
50 isDataTypeForDataTypePropertyType(property:DataTypePropertyModel):boolean;
53 export class DataTypesService implements IDataTypesService {
61 constructor(private sdcConfig:IAppConfigurtaion,
62 private $q:ng.IQService,
63 private $http:ng.IHttpService) {
66 private baseUrl = this.sdcConfig.api.root + this.sdcConfig.api.component_api_root;
68 dataTypes:DataTypesMap; //Data type map
69 selectedPropertiesName:string;
70 selectedInput:PropertyModel;
71 alreadySelectedProperties:Array<InputPropertyBase>;
72 selectedInstance:ComponentInstance;
73 selectedComponentInputs:Array<InputModel>;
75 public loadDataTypesCache = async (modelName: string): Promise<void> => {
78 model = {'model': modelName}
80 await this.$http.get(this.baseUrl + "dataTypes", {params: model})
81 .then((response: any) => {
82 this.dataTypes = response.data;
83 delete this.dataTypes['tosca.datatypes.Root'];
87 public fetchDataTypesByModel = (modelName: string): angular.IHttpPromise<any> => {
90 model = {'model': modelName}
92 return this.$http.get(this.baseUrl + "dataTypes", {params: model});
95 public getAllDataTypesFromModel = (modelName: string): DataTypesMap => {
96 this.loadDataTypesCache(modelName);
97 return this.dataTypes;
100 public findAllDataTypesByModel = (modelName: string): Promise<Map<string, DataTypeModel>> => {
101 return new Promise<Map<string, DataTypeModel>>((resolve, reject) => {
102 this.fetchDataTypesByModel(modelName).then(response => {
103 const dataTypes = response.data;
104 delete dataTypes[PROPERTY_DATA.ROOT_DATA_TYPE];
105 const dataTypeMap = new Map<string, DataTypeModel>();
106 for(const dataTypeKey of Object.keys(dataTypes)) {
107 dataTypeMap.set(dataTypeKey, new DataTypeModel(dataTypes[dataTypeKey]))
109 resolve(dataTypeMap);
116 public getAllDataTypes = ():DataTypesMap => {
117 return this.dataTypes;
120 //if the dt derived from simple- return the first parent type, else- return null
121 private getTypeForDataTypeDerivedFromSimple = (dataTypeName:string):string => {
122 /////////temporary hack for tosca primitives///////////////////////
123 if (!this.dataTypes[dataTypeName]) {
126 ///////////////////////////////////////////////////////////////////
127 if (this.dataTypes[dataTypeName].derivedFromName == "tosca.datatypes.Root" || this.dataTypes[dataTypeName].properties) {
130 if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.dataTypes[dataTypeName].derivedFromName) > -1) {
131 return this.dataTypes[dataTypeName].derivedFromName
133 return this.getTypeForDataTypeDerivedFromSimple(this.dataTypes[dataTypeName].derivedFromName);
137 //return list of data type properties and all its parents properties
138 //(not include the properties of its properties, in case this data type has not primitive properties)
139 public getFirsLevelOfDataTypeProperties = (dataTypeName:string):Array<DataTypePropertyModel> => {
140 let properties = this.dataTypes[dataTypeName].properties || [];
141 if (this.dataTypes[dataTypeName].derivedFromName != "tosca.datatypes.Root") {
142 properties = this.getFirsLevelOfDataTypeProperties(this.dataTypes[dataTypeName].derivedFromName).concat(properties);
147 //return false when type= data type (=not simple type) that not derived from simple type
148 public isDataTypeForSchemaType = (property:SchemaProperty):boolean=> {
149 property.simpleType = "";
150 if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1) {
153 let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
155 property.simpleType = simpleType;
161 public isDataTypeForPropertyType = (property:PropertyModel):boolean=> {
162 property.simpleType = "";
163 if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1) {
166 let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
168 property.simpleType = simpleType;
175 public isDataTypeForDataTypePropertyType = (property:DataTypePropertyModel):boolean=> {
176 property.simpleType = "";
177 let isScalarForNFoD:boolean = property.type === 'scalar-unit.size';
178 if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1 || isScalarForNFoD) {
181 let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
183 property.simpleType = simpleType;