diff options
author | andre.schmid <andre.schmid@est.tech> | 2022-06-15 15:30:40 +0100 |
---|---|---|
committer | Michael Morris <michael.morris@est.tech> | 2022-06-22 20:36:22 +0000 |
commit | 7a7b13726c195e2944ccc59e4d5c5ade57318763 (patch) | |
tree | c22384a2abfc24adeb1c69a3696cda15c8e37548 /catalog-ui/src/app/ng2/pages | |
parent | fbab79aeaccf74385c9a55b697a1055a86bdf171 (diff) |
Support TOSCA get_attribute function
Adds support to TOSCA get_attribute function in the Property Assignment
TOSCA Function modal.
Change-Id: I73dda215a7c9d7fecf0803cc259634279c3bdfb6
Issue-ID: SDC-4053
Signed-off-by: andre.schmid <andre.schmid@est.tech>
Diffstat (limited to 'catalog-ui/src/app/ng2/pages')
2 files changed, 50 insertions, 15 deletions
diff --git a/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.html b/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.html index f0db645b0e..b6b313d93c 100644 --- a/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.html +++ b/catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.html @@ -27,14 +27,14 @@ [ngValue]="toscaFunction">{{toscaFunction | lowercase}}</option> </select> </div> - <div class="i-sdc-form-item" *ngIf="toscaGetFunction.functionType === TOSCA_FUNCTION_GET_PROPERTY"> + <div class="i-sdc-form-item" *ngIf="showPropertySourceDropdown()"> <label class="i-sdc-form-label required">{{'TOSCA_FUNCTION_PROPERTY_SOURCE_LABEL' | translate}}</label> <select name="propertySource" [(ngModel)]="propertySource" (change)="onPropertySourceChange()"> <option *ngFor="let propertySource of propertySourceList" [ngValue]="propertySource">{{propertySource}}</option> </select> </div> - <div *ngIf="showDropdown()" class="i-sdc-form-item"> + <div *ngIf="showPropertyDropdown()" class="i-sdc-form-item"> <label class="i-sdc-form-label required">{{dropdownValuesLabel}}</label> <select [(ngModel)]="selectedProperty" name="selectedProperty" (change)="onPropertyChange()"> <option *ngFor="let value of propertyDropdownList" [ngValue]="value">{{value.propertyLabel}}</option> 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 4eefbcb467..b71a61dc01 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 @@ -18,7 +18,7 @@ */ import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; -import {ComponentMetadata, DataTypeModel, PropertyBEModel, PropertyModel} from 'app/models'; +import {AttributeModel, ComponentMetadata, DataTypeModel, PropertyBEModel, PropertyModel} from 'app/models'; import {TopologyTemplateService} from "../../../services/component-services/topology-template.service"; import {WorkspaceService} from "../../workspace/workspace.service"; import {PropertiesService} from "../../../services/properties.service"; @@ -82,8 +82,6 @@ export class ToscaFunctionComponent implements OnInit { 'toscaGetFunction': this.toscaGetFunctionForm }); - TOSCA_FUNCTION_GET_PROPERTY = ToscaGetFunctionType.GET_PROPERTY; - selectedProperty: PropertyDropdownValue; isLoading: boolean = false; propertyDropdownList: Array<PropertyDropdownValue> = []; @@ -123,7 +121,7 @@ export class ToscaFunctionComponent implements OnInit { } this.toscaGetFunction = new ToscaGetFunction(this.property.toscaGetFunction); this.toscaGetFunctionForm.setValue(this.toscaGetFunction); - if (this.toscaGetFunction.functionType === ToscaGetFunctionType.GET_PROPERTY) { + if (this.isGetPropertySelected() || this.isGetAttributeSelected()) { if (this.toscaGetFunction.propertySource === PropertySource.SELF) { this.propertySource = PropertySource.SELF; } else { @@ -138,6 +136,7 @@ export class ToscaFunctionComponent implements OnInit { } private loadToscaFunctions(): void { + this.toscaFunctions.push(ToscaGetFunctionType.GET_ATTRIBUTE); this.toscaFunctions.push(ToscaGetFunctionType.GET_INPUT); this.toscaFunctions.push(ToscaGetFunctionType.GET_PROPERTY); } @@ -210,6 +209,8 @@ export class ToscaFunctionComponent implements OnInit { this.dropdownValuesLabel = this.translateService.translate('INPUT_DROPDOWN_LABEL'); } else if (this.isGetPropertySelected()) { this.dropdownValuesLabel = this.translateService.translate('TOSCA_FUNCTION_PROPERTY_DROPDOWN_LABEL'); + } else if (this.isGetAttributeSelected()) { + this.dropdownValuesLabel = this.translateService.translate('TOSCA_FUNCTION_ATTRIBUTE_DROPDOWN_LABEL'); } } @@ -231,19 +232,20 @@ export class ToscaFunctionComponent implements OnInit { this.startLoading(); const propertiesObservable: Observable<ComponentGenericResponse> = this.getPropertyObservable(); propertiesObservable.subscribe( (response: ComponentGenericResponse) => { - const properties: PropertyBEModel[] = this.extractProperties(response); + const properties: Array<PropertyBEModel | AttributeModel> = this.extractProperties(response); if (!properties || properties.length === 0) { - const msgCode = this.isGetInputSelected() ? 'TOSCA_FUNCTION_NO_INPUT_FOUND' : 'TOSCA_FUNCTION_NO_PROPERTY_FOUND'; + const msgCode = this.getNotFoundMsgCode(); this.dropDownErrorMsg = this.translateService.translate(msgCode, {type: this.propertyTypeToString()}); return; } this.addPropertiesToDropdown(properties); if (this.propertyDropdownList.length == 0) { - const msgCode = this.isGetInputSelected() ? 'TOSCA_FUNCTION_NO_INPUT_FOUND' : 'TOSCA_FUNCTION_NO_PROPERTY_FOUND'; + const msgCode = this.getNotFoundMsgCode(); this.dropDownErrorMsg = this.translateService.translate(msgCode, {type: this.propertyTypeToString()}); } }, (error) => { console.error('An error occurred while loading properties.', error); + this.stopLoading(); }, () => { if (onComplete) { onComplete(); @@ -252,6 +254,20 @@ export class ToscaFunctionComponent implements OnInit { }); } + private getNotFoundMsgCode(): string { + if (this.isGetInputSelected()) { + return 'TOSCA_FUNCTION_NO_INPUT_FOUND'; + } + if (this.isGetAttributeSelected()) { + return 'TOSCA_FUNCTION_NO_ATTRIBUTE_FOUND'; + } + if (this.isGetPropertySelected()) { + return 'TOSCA_FUNCTION_NO_PROPERTY_FOUND'; + } + + return undefined; + } + private propertyTypeToString() { if (this.property.schemaType) { return `${this.property.type} of ${this.property.schemaType}`; @@ -259,7 +275,7 @@ export class ToscaFunctionComponent implements OnInit { return this.property.type; } - private extractProperties(componentGenericResponse: ComponentGenericResponse): PropertyBEModel[] { + private extractProperties(componentGenericResponse: ComponentGenericResponse): Array<PropertyBEModel | AttributeModel> { if (this.isGetInputSelected()) { return componentGenericResponse.inputs; } @@ -270,6 +286,10 @@ export class ToscaFunctionComponent implements OnInit { const componentInstanceProperties: PropertyModel[] = componentGenericResponse.componentInstancesProperties[this.instanceNameAndIdMap.get(this.propertySource)]; return this.removeSelectedProperty(componentInstanceProperties); } + if (this.propertySource === PropertySource.SELF) { + return componentGenericResponse.attributes; + } + return componentGenericResponse.componentInstancesAttributes[this.instanceNameAndIdMap.get(this.propertySource)]; } private getPropertyObservable(): Observable<ComponentGenericResponse> { @@ -282,6 +302,12 @@ export class ToscaFunctionComponent implements OnInit { } return this.topologyTemplateService.getComponentInstanceProperties(this.componentMetadata.componentType, this.componentMetadata.uniqueId); } + if (this.isGetAttributeSelected()) { + if (this.propertySource === PropertySource.SELF) { + return this.topologyTemplateService.findAllComponentAttributes(this.componentMetadata.componentType, this.componentMetadata.uniqueId); + } + return this.topologyTemplateService.findAllComponentInstanceAttributes(this.componentMetadata.componentType, this.componentMetadata.uniqueId); + } } private removeSelectedProperty(componentInstanceProperties: PropertyModel[]): PropertyModel[] { @@ -299,7 +325,7 @@ export class ToscaFunctionComponent implements OnInit { this.propertyDropdownList.sort((a, b) => a.propertyLabel.localeCompare(b.propertyLabel)); } - private addPropertiesToDropdown(properties: PropertyBEModel[]): void { + private addPropertiesToDropdown(properties: Array<PropertyBEModel | AttributeModel>): void { for (const property of properties) { if (this.hasSameType(property)) { this.addPropertyToDropdown({ @@ -314,7 +340,8 @@ export class ToscaFunctionComponent implements OnInit { } } - private fillPropertyDropdownWithMatchingChildProperties(inputProperty: PropertyBEModel, parentPropertyList: Array<PropertyBEModel> = []): void { + private fillPropertyDropdownWithMatchingChildProperties(inputProperty: PropertyBEModel | AttributeModel, + parentPropertyList: Array<PropertyBEModel | AttributeModel> = []): void { const dataTypeFound: DataTypeModel = this.dataTypeService.getDataTypeByModelAndTypeName(this.componentMetadata.model, inputProperty.type); if (!dataTypeFound || !dataTypeFound.properties) { return; @@ -334,7 +361,7 @@ export class ToscaFunctionComponent implements OnInit { }); } - private hasSameType(property: PropertyBEModel) { + private hasSameType(property: PropertyBEModel | AttributeModel) { if (this.typeHasSchema(this.property.type)) { if (!property.schema || !property.schema.property) { return false; @@ -349,6 +376,10 @@ export class ToscaFunctionComponent implements OnInit { return this.toscaGetFunction.functionType === ToscaGetFunctionType.GET_PROPERTY; } + private isGetAttributeSelected(): boolean { + return this.toscaGetFunction.functionType === ToscaGetFunctionType.GET_ATTRIBUTE; + } + private isGetInputSelected(): boolean { return this.toscaGetFunction.functionType === ToscaGetFunctionType.GET_INPUT; } @@ -369,8 +400,8 @@ export class ToscaFunctionComponent implements OnInit { this.isLoading = true; } - showDropdown(): boolean { - if (this.toscaGetFunction.functionType === ToscaGetFunctionType.GET_PROPERTY) { + showPropertyDropdown(): boolean { + if (this.isGetPropertySelected() || this.isGetAttributeSelected()) { return this.toscaGetFunction.propertySource && !this.isLoading && !this.dropDownErrorMsg; } @@ -416,6 +447,10 @@ export class ToscaFunctionComponent implements OnInit { showClearButton(): boolean { return this.allowClear && this.toscaGetFunction.functionType !== undefined; } + + showPropertySourceDropdown(): boolean { + return this.isGetPropertySelected() || this.isGetAttributeSelected(); + } } export interface PropertyDropdownValue { |