From 1bbecd7edbdd907a53812d303d378236d23d071e Mon Sep 17 00:00:00 2001 From: MichaelMorris Date: Wed, 25 Jan 2023 16:29:38 +0000 Subject: Fix datatype in model not found Signed-off-by: MichaelMorris Issue-ID: SDC-4348 Change-Id: I648ffd91d719982e55d5ddc786a471f641ece088 --- .../data-type-fields-structure.ts | 15 ++++++--- .../type-list/type-list-directive.html | 1 + .../type-list/type-list-directive.ts | 36 +++++++++++++++++++--- .../type-map/type-map-directive.html | 1 + .../property-types/type-map/type-map-directive.ts | 36 +++++++++++++++++++--- 5 files changed, 77 insertions(+), 12 deletions(-) (limited to 'catalog-ui/src/app/directives') diff --git a/catalog-ui/src/app/directives/property-types/data-type-fields-structure/data-type-fields-structure.ts b/catalog-ui/src/app/directives/property-types/data-type-fields-structure/data-type-fields-structure.ts index ff2344534a..cb16ffa2b4 100644 --- a/catalog-ui/src/app/directives/property-types/data-type-fields-structure/data-type-fields-structure.ts +++ b/catalog-ui/src/app/directives/property-types/data-type-fields-structure/data-type-fields-structure.ts @@ -70,9 +70,8 @@ export class DataTypeFieldsStructureDirective implements ng.IDirective { fieldsPrefixName: '=', readOnly: '=', defaultValue: '@', - // types: '=', - expandByDefault: '=' - + types: '=', + expandByDefault: '=' }; restrict = 'E'; @@ -102,7 +101,7 @@ export class DataTypeFieldsStructureDirective implements ng.IDirective { private initDataOnScope = (scope:any, $attr:any):void => { scope.dataTypesService = this.DataTypesService; - scope.dataTypeProperties = this.DataTypesService.getFirsLevelOfDataTypeProperties(scope.typeName); + scope.dataTypeProperties = this.getDataTypeProperties(scope.typeName, scope.types); if ($attr.defaultValue) { scope.currentTypeDefaultValue = JSON.parse($attr.defaultValue); } else { @@ -123,6 +122,14 @@ export class DataTypeFieldsStructureDirective implements ng.IDirective { } }); }; + + private getDataTypeProperties = (dataTypeName:string, typesInModel:DataTypesMap):Array => { + let properties = typesInModel[dataTypeName].properties || []; + if (typesInModel[dataTypeName].derivedFromName != "tosca.datatypes.Root") { + properties = this.getDataTypeProperties(typesInModel[dataTypeName].derivedFromName, typesInModel).concat(properties); + } + return properties; + }; private rerender = (scope:any):void => { scope.expanded = false; diff --git a/catalog-ui/src/app/directives/property-types/type-list/type-list-directive.html b/catalog-ui/src/app/directives/property-types/type-list/type-list-directive.html index 842b890d6e..e92e8b1a34 100644 --- a/catalog-ui/src/app/directives/property-types/type-list/type-list-directive.html +++ b/catalog-ui/src/app/directives/property-types/type-list/type-list-directive.html @@ -22,6 +22,7 @@ type-name="schemaProperty.type" parent-form-obj="parentFormObj" fields-prefix-name="fieldsPrefixName+''+$index" + types="types" read-only="readOnly">
diff --git a/catalog-ui/src/app/directives/property-types/type-list/type-list-directive.ts b/catalog-ui/src/app/directives/property-types/type-list/type-list-directive.ts index fe509416fa..23add5363e 100644 --- a/catalog-ui/src/app/directives/property-types/type-list/type-list-directive.ts +++ b/catalog-ui/src/app/directives/property-types/type-list/type-list-directive.ts @@ -22,8 +22,8 @@ * Created by rcohen on 9/15/2016. */ 'use strict'; -import {SchemaProperty, PropertyModel} from "app/models"; -import {ValidationUtils, PROPERTY_TYPES} from "app/utils"; +import {SchemaProperty, PropertyModel, DataTypesMap} from "app/models"; +import {ValidationUtils, PROPERTY_TYPES, PROPERTY_DATA} from "app/utils"; import {DataTypesService} from "app/services"; import {InstanceFeDetails} from "app/models/instance-fe-details"; import {ToscaGetFunction} from "app/models/tosca-get-function"; @@ -45,6 +45,7 @@ export interface ITypeListScope extends ng.IScope { stringSchema: SchemaProperty; showToscaFunction: Array; constraints:string[]; + types:DataTypesMap; getValidationPattern(type:string):RegExp; validateIntRange(value:string):boolean; @@ -81,7 +82,8 @@ export class TypeListDirective implements ng.IDirective { readOnly: '=',//is form read only defaultValue: '@',//this list default value maxLength: '=', - constraints: '=' + constraints: '=', + types: '=' }; restrict = 'E'; @@ -89,6 +91,32 @@ export class TypeListDirective implements ng.IDirective { template = ():string => { return require('./type-list-directive.html'); }; + + private isDataTypeForSchemaType = (property:SchemaProperty, types:DataTypesMap):boolean=> { + property.simpleType = ""; + if (property.type && 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; + }; + + private getTypeForDataTypeDerivedFromSimple = (dataTypeName:string, types:DataTypesMap):string => { + if (!types[dataTypeName]) { + return 'string'; + } + if (types[dataTypeName].derivedFromName == "tosca.datatypes.Root" || types[dataTypeName].properties) { + return null; + } + if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(types[dataTypeName].derivedFromName) > -1) { + return types[dataTypeName].derivedFromName + } + return this.getTypeForDataTypeDerivedFromSimple(types[dataTypeName].derivedFromName, types); + }; link = (scope:ITypeListScope, element:any, $attr:any) => { scope.propertyNameValidationPattern = this.PropertyNameValidationPattern; @@ -110,7 +138,7 @@ export class TypeListDirective implements ng.IDirective { }); //reset valueObjRef when schema type is changed scope.$watchCollection('schemaProperty.type', (newData:any):void => { - scope.isSchemaTypeDataType = this.DataTypesService.isDataTypeForSchemaType(scope.schemaProperty); + scope.isSchemaTypeDataType = this.isDataTypeForSchemaType(scope.schemaProperty, scope.types); }); //when user brows between properties in "edit property form" diff --git a/catalog-ui/src/app/directives/property-types/type-map/type-map-directive.html b/catalog-ui/src/app/directives/property-types/type-map/type-map-directive.html index 5c895115e5..b4ac6aae1e 100644 --- a/catalog-ui/src/app/directives/property-types/type-map/type-map-directive.html +++ b/catalog-ui/src/app/directives/property-types/type-map/type-map-directive.html @@ -111,6 +111,7 @@ type-name="schemaProperty.type" parent-form-obj="parentFormObj" fields-prefix-name="'mapValue'+fieldsPrefixName+''+$index" + types="types" read-only="readOnly" >
diff --git a/catalog-ui/src/app/directives/property-types/type-map/type-map-directive.ts b/catalog-ui/src/app/directives/property-types/type-map/type-map-directive.ts index ce8b997035..20470be126 100644 --- a/catalog-ui/src/app/directives/property-types/type-map/type-map-directive.ts +++ b/catalog-ui/src/app/directives/property-types/type-map/type-map-directive.ts @@ -22,9 +22,9 @@ * Created by rcohen on 9/15/2016. */ 'use strict'; -import {ValidationUtils, PROPERTY_TYPES} from "app/utils"; +import {ValidationUtils, PROPERTY_TYPES, PROPERTY_DATA} from "app/utils"; import {DataTypesService} from "app/services"; -import {SchemaProperty, PropertyModel} from "app/models"; +import {SchemaProperty, PropertyModel, DataTypesMap} from "app/models"; import {InstanceFeDetails} from "app/models/instance-fe-details"; import {ToscaGetFunction} from "app/models/tosca-get-function"; import {SubPropertyToscaFunction} from "app/models/sub-property-tosca-function"; @@ -47,6 +47,7 @@ export interface ITypeMapScope extends ng.IScope { constraints:string[]; showAddBtn: boolean; showToscaFunction: Array; + types:DataTypesMap; getValidationPattern(type:string):RegExp; validateIntRange(value:string):boolean; @@ -80,7 +81,8 @@ export class TypeMapDirective implements ng.IDirective { maxLength: '=', constraints: '=', showAddBtn: '=?', - parentProperty: '=' + parentProperty: '=', + types: '=' }; restrict = 'E'; @@ -88,6 +90,32 @@ export class TypeMapDirective implements ng.IDirective { template = (): string => { return require('./type-map-directive.html'); }; + + private isDataTypeForSchemaType = (property:SchemaProperty, types:DataTypesMap):boolean=> { + property.simpleType = ""; + if (property.type && 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; + }; + + private getTypeForDataTypeDerivedFromSimple = (dataTypeName:string, types:DataTypesMap):string => { + if (!types[dataTypeName]) { + return 'string'; + } + if (types[dataTypeName].derivedFromName == "tosca.datatypes.Root" || types[dataTypeName].properties) { + return null; + } + if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(types[dataTypeName].derivedFromName) > -1) { + return types[dataTypeName].derivedFromName + } + return this.getTypeForDataTypeDerivedFromSimple(types[dataTypeName].derivedFromName, types); + }; link = (scope:ITypeMapScope, element:any, $attr:any) => { scope.showAddBtn = angular.isDefined(scope.showAddBtn) ? scope.showAddBtn : true; @@ -110,7 +138,7 @@ export class TypeMapDirective implements ng.IDirective { //reset valueObjRef and mapKeys when schema type is changed scope.$watchCollection('schemaProperty.type', (newData:any):void => { - scope.isSchemaTypeDataType = this.DataTypesService.isDataTypeForSchemaType(scope.schemaProperty); + scope.isSchemaTypeDataType = this.isDataTypeForSchemaType(scope.schemaProperty, scope.types); if (scope.valueObjRef) { scope.mapKeys = Object.keys(scope.valueObjRef); //keeping another copy of the keys, as the mapKeys gets overridden sometimes -- cgit 1.2.3-korg