aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/services/data-types-service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-ui/src/app/services/data-types-service.ts')
-rw-r--r--catalog-ui/src/app/services/data-types-service.ts125
1 files changed, 125 insertions, 0 deletions
diff --git a/catalog-ui/src/app/services/data-types-service.ts b/catalog-ui/src/app/services/data-types-service.ts
new file mode 100644
index 0000000000..1c6ac07fdc
--- /dev/null
+++ b/catalog-ui/src/app/services/data-types-service.ts
@@ -0,0 +1,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;
+ };
+}