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";
27 IAppConfigurtaion, InputModel,
32 import {PROPERTY_DATA} from "../utils/constants";
33 import {List} from "lodash";
34 import {Observable} from "rxjs/Observable";
36 export interface IDataTypesService {
38 dataTypes:DataTypesMap; //Data type map
39 selectedPropertiesName:string;
40 selectedInput:PropertyModel;
41 alreadySelectedProperties:Array<InputPropertyBase>;
42 selectedInstance:ComponentInstance;
43 selectedComponentInputs:Array<InputModel>;
45 loadDataTypesCache(modelName:string):void;
46 findAllDataTypesByModel(modelName: string): void;
47 getAllDataTypes():DataTypesMap;
48 getFirsLevelOfDataTypeProperties(dataTypeName:string):Array<DataTypePropertyModel>;
49 isDataTypeForSchemaType(property:SchemaProperty):boolean;
50 isDataTypeForPropertyType(property:PropertyModel):boolean;
51 isDataTypeForDataTypePropertyType(property:DataTypePropertyModel):boolean;
54 export class DataTypesService implements IDataTypesService {
62 constructor(private sdcConfig:IAppConfigurtaion,
63 private $q:ng.IQService,
64 private $http:ng.IHttpService) {
67 private baseUrl = this.sdcConfig.api.root + this.sdcConfig.api.component_api_root;
69 dataTypes:DataTypesMap; //Data type map
70 selectedPropertiesName:string;
71 selectedInput:PropertyModel;
72 alreadySelectedProperties:Array<InputPropertyBase>;
73 selectedInstance:ComponentInstance;
74 selectedComponentInputs:Array<InputModel>;
76 public loadDataTypesCache = async (modelName: string): Promise<void> => {
79 model = {'model': modelName}
81 await this.$http.get(this.baseUrl + "dataTypes", {params: model})
82 .then((response: any) => {
83 this.dataTypes = response.data;
84 delete this.dataTypes['tosca.datatypes.Root'];
88 public fetchDataTypesByModel = (modelName: string): angular.IHttpPromise<any> => {
91 model = {'model': modelName}
93 return this.$http.get(this.baseUrl + "dataTypes", {params: model});
96 public getAllDataTypesFromModel = (modelName: string): DataTypesMap => {
97 this.loadDataTypesCache(modelName);
98 return this.dataTypes;
101 public getDataTypesFromAllModel = (): Observable<Array<DataTypeModel>> => {
102 return new Observable<Array<DataTypeModel>>(subscriber => {
103 this.$http.get<List<DataTypesMap>>(this.baseUrl + "allDataTypes")
104 .then(promiseValue => {
105 const allDataTypes = this.getDataTypesItems(promiseValue.data);
106 subscriber.next(allDataTypes);
111 private getDataTypesItems(dataTypesListOfMap: List<DataTypesMap>):Array<DataTypeModel> {
112 const dataTypes = new Array<DataTypeModel>();
113 angular.forEach(dataTypesListOfMap, (dataTypesMap: DataTypesMap): void => {
114 for (const dataTypeKey of Object.keys(dataTypesMap)) {
115 dataTypes.push(new DataTypeModel(dataTypesMap[dataTypeKey]))
121 public findAllDataTypesByModel = (modelName: string): Promise<Map<string, DataTypeModel>> => {
122 return new Promise<Map<string, DataTypeModel>>((resolve, reject) => {
123 this.fetchDataTypesByModel(modelName).then(response => {
124 const dataTypes = response.data;
125 delete dataTypes[PROPERTY_DATA.ROOT_DATA_TYPE];
126 const dataTypeMap = new Map<string, DataTypeModel>();
127 for(const dataTypeKey of Object.keys(dataTypes)) {
128 dataTypeMap.set(dataTypeKey, new DataTypeModel(dataTypes[dataTypeKey]))
130 resolve(dataTypeMap);
137 public getAllDataTypes = ():DataTypesMap => {
138 return this.dataTypes;
141 //if the dt derived from simple- return the first parent type, else- return null
142 private getTypeForDataTypeDerivedFromSimple = (dataTypeName:string):string => {
143 /////////temporary hack for tosca primitives///////////////////////
144 if (!this.dataTypes[dataTypeName]) {
147 ///////////////////////////////////////////////////////////////////
148 if (this.dataTypes[dataTypeName].derivedFromName == "tosca.datatypes.Root" || this.dataTypes[dataTypeName].properties) {
151 if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.dataTypes[dataTypeName].derivedFromName) > -1) {
152 return this.dataTypes[dataTypeName].derivedFromName
154 return this.getTypeForDataTypeDerivedFromSimple(this.dataTypes[dataTypeName].derivedFromName);
158 //return list of data type properties and all its parents properties
159 //(not include the properties of its properties, in case this data type has not primitive properties)
160 public getFirsLevelOfDataTypeProperties = (dataTypeName:string):Array<DataTypePropertyModel> => {
161 let properties = this.dataTypes[dataTypeName].properties || [];
162 if (this.dataTypes[dataTypeName].derivedFromName != "tosca.datatypes.Root") {
163 properties = this.getFirsLevelOfDataTypeProperties(this.dataTypes[dataTypeName].derivedFromName).concat(properties);
168 //return false when type= data type (=not simple type) that not derived from simple type
169 public isDataTypeForSchemaType = (property:SchemaProperty):boolean=> {
170 property.simpleType = "";
171 if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1) {
174 let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
176 property.simpleType = simpleType;
182 public isDataTypeForPropertyType = (property:PropertyModel):boolean=> {
183 property.simpleType = "";
184 if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1) {
187 let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
189 property.simpleType = simpleType;
196 public isDataTypeForDataTypePropertyType = (property:DataTypePropertyModel):boolean=> {
197 property.simpleType = "";
198 let isScalarForNFoD:boolean = property.type === 'scalar-unit.size';
199 if (property.type && PROPERTY_DATA.TYPES.indexOf(property.type) > -1 || isScalarForNFoD) {
202 let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type);
204 property.simpleType = simpleType;