diff options
Diffstat (limited to 'catalog-ui/app/scripts/services/data-types-service.ts')
-rw-r--r-- | catalog-ui/app/scripts/services/data-types-service.ts | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/catalog-ui/app/scripts/services/data-types-service.ts b/catalog-ui/app/scripts/services/data-types-service.ts new file mode 100644 index 0000000000..0e5fca8b5d --- /dev/null +++ b/catalog-ui/app/scripts/services/data-types-service.ts @@ -0,0 +1,129 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +/// <reference path="../references"/> +module Sdc.Services { + + 'use strict'; + + export interface IDataTypesService { + //declare methods + getAllDataTypes():ng.IPromise<Models.PropertyModel>; + getFirsLevelOfDataTypeProperties(dataTypeName:string, dataTypes:Models.DataTypesMap):Array<Models.DataTypePropertyModel>; + isDataTypeForSchemaType(property:Models.SchemaProperty, types:Models.DataTypesMap):boolean; + isDataTypeForPropertyType(property:Models.PropertyModel, types:Models.DataTypesMap):boolean; + isDataTypeForDataTypePropertyType(property:Models.DataTypePropertyModel, types:Models.DataTypesMap):boolean; + } + + export class DataTypesService implements IDataTypesService { + + static '$inject' = [ + 'sdcConfig', + '$q', + '$http' + ]; + + constructor(private sdcConfig:Models.IAppConfigurtaion, + private $q:ng.IQService, + private $http:ng.IHttpService) { + } + + //if the dt derived from simple- return the first parent type, else- return null + private getTypeForDataTypeDerivedFromSimple = (dataTypeName:string, dataTypes:Models.DataTypesMap):string => { + /////////temporary hack for tosca primitives/////////////////////// + if(!dataTypes[dataTypeName]){ + return 'string'; + } + /////////////////////////////////////////////////////////////////// + if(dataTypes[dataTypeName].derivedFromName == "tosca.datatypes.Root" || dataTypes[dataTypeName].properties){ + return null; + } + if(Utils.Constants.PROPERTY_DATA.SIMPLE_TYPES.indexOf(dataTypes[dataTypeName].derivedFromName) > -1 ){ + return dataTypes[dataTypeName].derivedFromName + } + return this.getTypeForDataTypeDerivedFromSimple(dataTypes[dataTypeName].derivedFromName,dataTypes); + }; + + public getAllDataTypes = ():ng.IPromise<Models.PropertyModel> => { + let deferred = this.$q.defer(); + this.$http({ + url: this.sdcConfig.api.root + this.sdcConfig.api.component_api_root + "dataTypes", + method: "get" + }) + .success((response:any) => { + deferred.resolve(response); + }) + .error((err) => { + deferred.reject(err); + }); + return deferred.promise; + }; + + //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, dataTypes:Models.DataTypesMap):Array<Models.DataTypePropertyModel> => { + let properties = dataTypes[dataTypeName].properties || []; + if(dataTypes[dataTypeName].derivedFromName != "tosca.datatypes.Root" ){ + properties = this.getFirsLevelOfDataTypeProperties(dataTypes[dataTypeName].derivedFromName,dataTypes).concat(properties); + } + return properties; + }; + + //return false when type= data type (=not simple type) that not derived from simple type + public isDataTypeForSchemaType = (property:Models.SchemaProperty, types:Models.DataTypesMap):boolean=>{ + property.simpleType=""; + if(property.type && Utils.Constants.PROPERTY_DATA.TYPES.indexOf(property.type) > -1){ + return false; + } + let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type, types); + if(simpleType){ + property.simpleType=simpleType; + return false; + } + return true; + }; + + public isDataTypeForPropertyType = (property:Models.PropertyModel, types:Models.DataTypesMap):boolean=>{ + property.simpleType=""; + if(property.type && Utils.Constants.PROPERTY_DATA.TYPES.indexOf(property.type) > -1){ + return false; + } + let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type, types); + if(simpleType){ + property.simpleType=simpleType; + return false; + } + return true; + }; + + public isDataTypeForDataTypePropertyType = (property:Models.DataTypePropertyModel, types:Models.DataTypesMap):boolean=>{ + property.simpleType=""; + if(property.type && Utils.Constants.PROPERTY_DATA.TYPES.indexOf(property.type) > -1){ + return false; + } + let simpleType = this.getTypeForDataTypeDerivedFromSimple(property.type, types); + if(simpleType){ + property.simpleType=simpleType; + return false; + } + return true; + }; + + } +} |