From 7565f810f9fa50c8140843b2f81e8fb428815154 Mon Sep 17 00:00:00 2001 From: imamSidero Date: Thu, 23 Mar 2023 11:25:23 +0000 Subject: Provide tosca function capability to all nested levels Tosca function capability is provided to all nested levels of list, map and custom types Issue-ID: SDC-4445 Signed-off-by: Imam hussain Change-Id: I29907bdac83d3cadf90aa0a2ed538002132b4789 --- .../properties-assignment.page.component.ts | 51 +++++++--------------- .../services/properties.utils.ts | 33 +++++++++----- .../tosca-function/tosca-function.component.ts | 11 +---- .../tosca-get-function.component.ts | 35 +++++++++++---- 4 files changed, 65 insertions(+), 65 deletions(-) (limited to 'catalog-ui/src/app/ng2/pages') diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.ts b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.ts index 17bb1a63cc..0e3e13917a 100644 --- a/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.ts +++ b/catalog-ui/src/app/ng2/pages/properties-assignment/properties-assignment.page.component.ts @@ -585,6 +585,18 @@ export class PropertiesAssignmentComponent { modal.instance.open(); } + private deleteToscaValue(valueJson : any, currentKey: string[]) { + if(currentKey.length == 1) { + if (Array.isArray(valueJson) && !isNaN(Number(currentKey[0]))) { + valueJson.splice(Number(currentKey[0]),1); + } else { + delete valueJson[currentKey[0]]; + } + } else { + this.deleteToscaValue(valueJson[currentKey[0]],currentKey.splice(1,currentKey.length -1)); + } + } + private clearCheckedInstancePropertyValue() { const checkedInstanceProperty: PropertyBEModel = this.buildCheckedInstanceProperty(); const currentValue : any = checkedInstanceProperty.value; @@ -594,37 +606,15 @@ export class PropertiesAssignmentComponent { if (checkedInstanceProperty instanceof PropertyDeclareAPIModel && (checkedInstanceProperty).propertiesName){ const propertiesNameArray = (checkedInstanceProperty).propertiesName; const parts = propertiesNameArray.split("#"); - let currentKey = []; - if (this.isListOrMap(checkedInstanceProperty.type)) { - if (checkedInstanceProperty.schemaType == PROPERTY_TYPES.MAP) { - currentKey.push((checkedInstanceProperty.input).parentMapKey); - } - currentKey.push((checkedInstanceProperty.input).mapKey); - if (checkedInstanceProperty.schemaType != PROPERTY_TYPES.MAP && this.isComplexSchemaType(checkedInstanceProperty.schemaType)) { - currentKey.push(parts.reverse()[0]); - } - } + let currentKey = (checkedInstanceProperty.input).toscaPath; if (propertiesNameArray.length > 1){ const index = checkedInstanceProperty.subPropertyToscaFunctions.findIndex(existingSubPropertyToscaFunction => this.areEqual(existingSubPropertyToscaFunction.subPropertyPath, currentKey.length > 0 ? currentKey : parts.slice(1))); checkedInstanceProperty.subPropertyToscaFunctions.splice(index, 1); } if(currentValue !== null && currentKey.length > 0){ let valueJson = JSON.parse(currentValue); - if(currentKey.length >1){ - let innerObj = valueJson[currentKey[0]]; - delete innerObj[currentKey[1]]; - valueJson[currentKey[0]] = innerObj; - }else{ - delete valueJson[currentKey[0]]; - } - if (checkedInstanceProperty.type == PROPERTY_TYPES.LIST && currentKey.length == 1) { - let listValue = valueJson.filter(function (item) { - return item != null && item != ''; - }); - checkedInstanceProperty.value = JSON.stringify(listValue); - } else { - checkedInstanceProperty.value = JSON.stringify(valueJson); - } + this.deleteToscaValue(valueJson, currentKey); + checkedInstanceProperty.value = JSON.stringify(valueJson); } } if (this.selectedInstanceData instanceof ComponentInstance) { @@ -648,16 +638,7 @@ export class PropertiesAssignmentComponent { if (checkedProperty instanceof PropertyDeclareAPIModel && (checkedProperty).propertiesName){ const propertiesName = (checkedProperty).propertiesName; const parts = propertiesName.split("#"); - let currentKey = []; - if (this.isListOrMap(checkedProperty.type)) { - if (checkedProperty.schemaType == PROPERTY_TYPES.MAP) { - currentKey.push((checkedProperty.input).parentMapKey); - } - currentKey.push((checkedProperty.input).mapKey); - if (checkedProperty.schemaType != PROPERTY_TYPES.MAP && this.isComplexSchemaType(checkedProperty.schemaType)) { - currentKey.push(parts.reverse()[0]); - } - } + let currentKey = (checkedProperty.input).toscaPath; if (checkedProperty.subPropertyToscaFunctions == null){ checkedProperty.subPropertyToscaFunctions = []; } diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/services/properties.utils.ts b/catalog-ui/src/app/ng2/pages/properties-assignment/services/properties.utils.ts index bc5345c386..8dd4ca96ec 100644 --- a/catalog-ui/src/app/ng2/pages/properties-assignment/services/properties.utils.ts +++ b/catalog-ui/src/app/ng2/pages/properties-assignment/services/properties.utils.ts @@ -105,15 +105,14 @@ export class PropertiesUtils { newProps.push(parentProp); if (!property.schema.property.isSimpleType) { - let additionalChildren:Array = this.createFlattenedChildren(property.schema.property.type, parentProp.propertiesName, key); + let additionalChildren:Array = this.createFlattenedChildren(property.schema.property.type, parentProp.propertiesName, key, parentProp.toscaPath); this.assignFlattenedChildrenValues(parentProp.valueObj, additionalChildren, parentProp.propertiesName); additionalChildren.forEach(prop => { prop.canBeDeclared = false; if (property.subPropertyToscaFunctions != null) { const subToscaFunctArray : SubPropertyToscaFunction[] = property.subPropertyToscaFunctions; subToscaFunctArray.forEach(subToscaFunct => { - const keyArray : string[] = subToscaFunct.subPropertyPath; - if (keyArray.length > 1 && prop.mapKey == keyArray[0] && prop.name == keyArray[1]) { + if (subToscaFunct.subPropertyPath.toString() === prop.toscaPath.toString()) { prop.toscaFunction = subToscaFunct.toscaFunction; } }); @@ -128,13 +127,15 @@ export class PropertiesUtils { /** * Creates derivedFEProperties of a specified type and returns them. */ - private createFlattenedChildren = (type: string, parentName: string, key: string):Array => { + private createFlattenedChildren = (type: string, parentName: string, key: string, toscaPath?: string[]):Array => { let tempProps: Array = []; let dataTypeObj: DataTypeModel = this.dataTypeService.getDataTypeByTypeName(type); - this.dataTypeService.getDerivedDataTypeProperties(dataTypeObj, tempProps, parentName); - tempProps.forEach(tempDervObj => { - tempDervObj.mapKey = key; - }); + this.dataTypeService.getDerivedDataTypeProperties(dataTypeObj, tempProps, parentName, toscaPath); + if (key != '') { + tempProps.forEach(tempDervObj => { + tempDervObj.mapKey = key; + }); + } return _.sortBy(tempProps, ['propertiesName']); } @@ -161,6 +162,16 @@ export class PropertiesUtils { property.flattenedChildren.push(...this.createListOrMapChildren(lastCreatedChild, keyNested, nestedValue[keyNested])); }); } + if (property.flattenedChildren && property.subPropertyToscaFunctions) { + property.flattenedChildren.forEach((prop, index) => { + property.subPropertyToscaFunctions.forEach(subPropertyToscaFunction => { + const toscaFunctionPath = subPropertyToscaFunction.subPropertyPath.join('#'); + if (subPropertyToscaFunction.subPropertyPath.toString() === prop.toscaPath.toString()) { + prop.toscaFunction = subPropertyToscaFunction.toscaFunction; + } + }); + }); + } }); } else if (property.derivedDataType === DerivedPropertyType.COMPLEX) { property.flattenedChildren = this.createFlattenedChildren(property.type, property.name, ""); @@ -183,11 +194,11 @@ export class PropertiesUtils { const subPropertyPath = prop.propertiesName.substring(prop.propertiesName.indexOf(topLevelPropertyName) + topLevelPropertyName.length + 1); subPropertyToscaFunctions.forEach(subPropertyToscaFunction => { const toscaFunctionPath = subPropertyToscaFunction.subPropertyPath.join('#'); - if (subPropertyPath === toscaFunctionPath){ + if (subPropertyPath === toscaFunctionPath || subPropertyToscaFunction.subPropertyPath.toString() === prop.toscaPath.toString()) { prop.toscaFunction = subPropertyToscaFunction.toscaFunction; } - }) - }) + }); + }); } /* diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.ts b/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.ts index 9ea0c8f214..d46ac2eb10 100644 --- a/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.ts +++ b/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.ts @@ -114,16 +114,7 @@ export class ToscaFunctionComponent implements OnInit, OnChanges { if (this.property instanceof PropertyDeclareAPIModel && this.property.subPropertyToscaFunctions && ( this.property).propertiesName){ let propertiesPath = ( this.property).propertiesName.split("#"); if (propertiesPath.length > 1){ - let keyToFind = []; - if (this.property.type == PROPERTY_TYPES.MAP || this.property.type == PROPERTY_TYPES.LIST) { - if (this.property.type == PROPERTY_TYPES.LIST && this.property.schemaType == PROPERTY_TYPES.MAP) { - keyToFind.push((this.property.input).parentMapKey); - } - keyToFind.push((this.property.input).mapKey); - if (this.property.schemaType != PROPERTY_TYPES.MAP && PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.property.schemaType) === -1) { - keyToFind.push(propertiesPath.reverse()[0]); - } - } + let keyToFind = (this.property.input).toscaPath; let subPropertyToscaFunction = this.property.subPropertyToscaFunctions.find(subPropertyToscaFunction => this.areEqual(subPropertyToscaFunction.subPropertyPath, keyToFind.length > 0 ? keyToFind : propertiesPath.slice(1))); if (subPropertyToscaFunction){ diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-get-function/tosca-get-function.component.ts b/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-get-function/tosca-get-function.component.ts index b0146cc1cf..656d7d6d71 100644 --- a/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-get-function/tosca-get-function.component.ts +++ b/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-get-function/tosca-get-function.component.ts @@ -264,11 +264,21 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges { private propertyTypeToString() { if (this.isSubProperty()){ - if ((this.typeHasSchema(this.property.type) && this.property instanceof PropertyDeclareAPIModel && - ( this.property).input instanceof DerivedFEProperty) || this.compositionMap) { + if ((this.property instanceof PropertyDeclareAPIModel && ( this.property).input instanceof DerivedFEProperty) + || this.compositionMap) { if(this.isComplexType(this.property.schemaType) && !this.compositionMap){ - let propertySchemaType = ( this.property).input.type; - return propertySchemaType == PROPERTY_TYPES.MAP ? PROPERTY_TYPES.STRING : propertySchemaType; + let mapChildProp : DerivedFEProperty = ( ( this.property).input); + let propertySchemaType = mapChildProp.type; + if (this.property.type == PROPERTY_TYPES.MAP || propertySchemaType == PROPERTY_TYPES.MAP) { + if (mapChildProp.mapKey != '' && mapChildProp.mapKey != null && mapChildProp.schema.property.type != null) { + propertySchemaType = mapChildProp.schema.property.type; + } + } + if ((propertySchemaType == PROPERTY_TYPES.MAP || (propertySchemaType == PROPERTY_TYPES.LIST && mapChildProp.schema.property.type == PROPERTY_TYPES.MAP)) + && mapChildProp.isChildOfListOrMap) { + propertySchemaType = PROPERTY_TYPES.STRING; + } + return propertySchemaType; }else{ return this.property.schema.property.type; } @@ -379,10 +389,13 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges { private hasSameType(property: PropertyBEModel | AttributeBEModel): boolean { if (this.typeHasSchema(this.property.type)) { if ((this.property instanceof PropertyDeclareAPIModel && ( this.property).input instanceof DerivedFEProperty) || this.compositionMap) { - if(this.isComplexType(this.property.schemaType) && !this.compositionMap){ - let propertySchemaType = ( this.property).input.type; - propertySchemaType = propertySchemaType == PROPERTY_TYPES.MAP ? PROPERTY_TYPES.STRING : propertySchemaType; - return property.type === propertySchemaType; + let childObject : DerivedFEProperty = (( this.property).input); + let childSchemaType = this.property.schemaType != null ? this.property.schemaType : childObject.type; + if(this.isComplexType(childSchemaType) && !this.compositionMap){ + if (childObject.type == PROPERTY_TYPES.MAP && childObject.isChildOfListOrMap) { + return property.type === PROPERTY_TYPES.STRING; + } + return property.type === childObject.type; }else{ return property.type === this.property.schema.property.type; } @@ -393,7 +406,11 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges { return property.type === this.property.type && this.property.schema.property.type === property.schema.property.type; } if (this.property.schema.property.isDataType && this.property instanceof PropertyDeclareAPIModel && (this.property).propertiesName){ - let typeToMatch = this.getType((this.property).propertiesName.split("#").slice(1), this.property.type); + let typeToMatch = ( this.property).input.type; + let childObject : DerivedFEProperty = (( this.property).input); + if (childObject.type == PROPERTY_TYPES.MAP && childObject.isChildOfListOrMap) { + typeToMatch = PROPERTY_TYPES.STRING; + } return property.type === typeToMatch; } -- cgit 1.2.3-korg