diff options
Diffstat (limited to 'catalog-ui/src/app/models/properties-inputs')
3 files changed, 65 insertions, 17 deletions
diff --git a/catalog-ui/src/app/models/properties-inputs/derived-fe-property.ts b/catalog-ui/src/app/models/properties-inputs/derived-fe-property.ts index 7ca1fee21d..c4ba64a8af 100644 --- a/catalog-ui/src/app/models/properties-inputs/derived-fe-property.ts +++ b/catalog-ui/src/app/models/properties-inputs/derived-fe-property.ts @@ -48,22 +48,34 @@ export class DerivedFEProperty extends PropertyBEModel { mapInlist: boolean inputName: string; parentMapKey: string; + toscaPath: string[]; constructor(property: PropertyBEModel, parentName?: string, createChildOfListOrMap?: boolean, key?:string, value?:any) { if (!createChildOfListOrMap) { //creating a standard derived prop super(property); + this.toscaPath = []; this.parentName = parentName ? parentName : null; this.propertiesName = (parentName) ? parentName + '#' + property.name : property.name; this.canBeDeclared = true; //defaults to true + if (property instanceof DerivedFEProperty) { + this.toscaPath = property.toscaPath != null ? property.toscaPath : []; + } else { + this.toscaPath = property.parentToscaPath != null ? property.parentToscaPath : property.parentToscaPath; + } + if (this.toscaPath.length == 0 && parentName != null && parentName.indexOf('#') != -1) { + let lastparent = parentName.split('#'); + this.toscaPath.push(lastparent[lastparent.length - 1]); + } + this.toscaPath.push(property.name); } else { //creating a direct child of list or map (ie. Item that can be deleted, with UUID instead of name) super(null); - if(property.subPropertyToscaFunctions != null){ - property.subPropertyToscaFunctions.forEach((item : SubPropertyToscaFunction) => { - if(item.subPropertyPath[0] === key){ - this.toscaFunction = item.toscaFunction; - } - }); + let toscaPathCopy = null; + if (property instanceof DerivedFEProperty) { + toscaPathCopy = property.toscaPath != null ? property.toscaPath .toString() : null; + } else { + toscaPathCopy = property.parentToscaPath != null ? property.parentToscaPath.toString() : null; } + this.toscaPath = toscaPathCopy != null ? toscaPathCopy.split(",") : []; this.isChildOfListOrMap = true; this.canBeDeclared = false; this.name = UUID.UUID(); @@ -72,16 +84,35 @@ export class DerivedFEProperty extends PropertyBEModel { if (property.type == PROPERTY_TYPES.LIST) { let parentKey : string = null; - if(property.value != null) { - const valueJson = JSON.parse(property.value); - if (key != '') { - parentKey = key; - }else{ - let indexNumber = Number(Object.keys(valueJson).sort().reverse()[0]) + 1; - parentKey = indexNumber.toString(); + if (property instanceof DerivedFEProperty) { + if (property.valueObj != '') { + if (key != '') { + let listIndex = Number(key); + if (!isNaN(listIndex)) { + this.toscaPath.push(key); + } else { + let newIndex = Object.keys(property.valueObj).findIndex(valueKey => (valueKey == key)); + this.toscaPath.push(newIndex.toString()); + } + } else { + let toscaIndex = Object.keys(property.valueObj).sort().reverse()[0]; + this.toscaPath.push((Number(toscaIndex) + 1).toString()); + } + } else { + this.toscaPath.push("0"); + } + } else { + if (property instanceof PropertyFEModel && property.valueObj != '') { + if (key != '') { + parentKey = key; + }else{ + let toscaIndex = Object.keys(property.valueObj).sort().reverse()[0]; + parentKey = (Number(toscaIndex) + 1).toString(); + } + } else { + parentKey = "0"; } - }else { - parentKey = "0"; + this.toscaPath.push(parentKey); } if (property.schemaType != PROPERTY_TYPES.MAP) { this.mapKey = parentKey; @@ -118,7 +149,14 @@ export class DerivedFEProperty extends PropertyBEModel { } else { this.schema = new SchemaPropertyGroupModel(new SchemaProperty(property.schema.property)); } - + if (this.toscaPath != null) { + let lastIndex = this.toscaPath[this.toscaPath.length - 1]; + if(this.mapKey != lastIndex){ + this.toscaPath.push(this.mapKey); + } + } else { + this.toscaPath.push(this.mapKey); + } } this.valueObj = (this.type == PROPERTY_TYPES.JSON && typeof value == 'object') ? JSON.stringify(value) : value; if (value != null) { @@ -126,7 +164,14 @@ export class DerivedFEProperty extends PropertyBEModel { } this.updateValueObjOrig(); } - // this.constraints = property ? property.constraints : null; + this.parentToscaPath = this.toscaPath; + if(property.subPropertyToscaFunctions != null){ + property.subPropertyToscaFunctions.forEach((item : SubPropertyToscaFunction) => { + if(item.subPropertyPath.toString() === this.toscaPath.toString() && this.uniqueId == null){ + this.toscaFunction = item.toscaFunction; + } + }); + } this.valueObjIsValid = true; this.derivedDataType = this.getDerivedPropertyType(); this.inputName = property.inputName; diff --git a/catalog-ui/src/app/models/properties-inputs/property-be-model.ts b/catalog-ui/src/app/models/properties-inputs/property-be-model.ts index e4c0f8165c..a939ed0fda 100644 --- a/catalog-ui/src/app/models/properties-inputs/property-be-model.ts +++ b/catalog-ui/src/app/models/properties-inputs/property-be-model.ts @@ -79,6 +79,7 @@ export class PropertyBEModel { toscaGetFunction: ToscaGetFunctionDto; toscaFunction: ToscaFunction; subPropertyToscaFunctions: SubPropertyToscaFunction[]; + parentToscaPath: string[] = []; constructor(property?: PropertyBEModel) { if (property) { @@ -106,6 +107,7 @@ export class PropertyBEModel { this.inputPath = property.inputPath; this.inputName = property.inputName; this.metadata = property.metadata; + this.parentToscaPath = property.parentToscaPath; if (property.toscaFunction) { this.toscaFunction = property.toscaFunction; } else if (property.toscaGetFunction) { diff --git a/catalog-ui/src/app/models/properties-inputs/property-fe-model.ts b/catalog-ui/src/app/models/properties-inputs/property-fe-model.ts index 49baefd4e0..1f73d2e4ec 100644 --- a/catalog-ui/src/app/models/properties-inputs/property-fe-model.ts +++ b/catalog-ui/src/app/models/properties-inputs/property-fe-model.ts @@ -182,6 +182,7 @@ export class PropertyFEModel extends PropertyBEModel { const oldActualMapKey = childProp.getActualMapKey(); childProp.mapKey = newMapKey; + childProp.toscaPath[childProp.toscaPath.length - 1] = newMapKey; if (childProp.mapKey === null) { // null -> remove map key childProp.mapKeyError = null; } else if (!childProp.mapKey) { |