aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvasraz <vasyl.razinkov@est.tech>2022-08-30 18:17:21 +0100
committerVasyl Razinkov <vasyl.razinkov@est.tech>2022-09-02 12:46:09 +0000
commit3f48762a391733561bb1ed171ea0a15bf0ea50ee (patch)
tree2adc1aee69d1253c7a0c3d4fbc7f5440067b8d2f
parent97b5fa431d5924d90e97adedf76f3ce5648cd938 (diff)
Allow to select properties in the get_attribute function
Signed-off-by: Vasyl Razinkov <vasyl.razinkov@est.tech> Change-Id: Ib35d5d1e3d83ed8e87ce45c20e9cc1a641c5bde2 Issue-ID: SDC-4149
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/validation/ToscaFunctionValidatorImpl.java71
-rw-r--r--catalog-ui/src/app/models.ts16
-rw-r--r--catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-get-function/tosca-get-function.component.ts30
-rw-r--r--catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts4
4 files changed, 70 insertions, 51 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/validation/ToscaFunctionValidatorImpl.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/validation/ToscaFunctionValidatorImpl.java
index ed37347a45..083a03fb42 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/validation/ToscaFunctionValidatorImpl.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/validation/ToscaFunctionValidatorImpl.java
@@ -24,6 +24,8 @@ package org.openecomp.sdc.be.components.impl.validation;
import fj.data.Either;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.onap.sdc.tosca.datatypes.model.PropertyType;
@@ -63,42 +65,51 @@ public class ToscaFunctionValidatorImpl implements ToscaFunctionValidator {
private <T extends PropertyDataDefinition> void validateToscaGetFunction(T property, Component parentComponent) {
final ToscaGetFunctionDataDefinition toscaGetFunction = (ToscaGetFunctionDataDefinition) property.getToscaFunction();
validateGetToscaFunctionAttributes(toscaGetFunction);
- validateGetPropertySource(toscaGetFunction.getFunctionType(), toscaGetFunction.getPropertySource());
- if (toscaGetFunction.getFunctionType() == ToscaGetFunctionType.GET_INPUT) {
- validateGetFunction(property, parentComponent.getInputs(), parentComponent.getModel());
- return;
- }
- if (toscaGetFunction.getFunctionType() == ToscaGetFunctionType.GET_PROPERTY) {
- if (toscaGetFunction.getPropertySource() == PropertySource.SELF) {
- validateGetFunction(property, parentComponent.getProperties(), parentComponent.getModel());
- } else if (toscaGetFunction.getPropertySource() == PropertySource.INSTANCE) {
- final ComponentInstance componentInstance =
- parentComponent.getComponentInstanceById(toscaGetFunction.getSourceUniqueId())
+ final ToscaGetFunctionType functionType = toscaGetFunction.getFunctionType();
+ validateGetPropertySource(functionType, toscaGetFunction.getPropertySource());
+ final String model = parentComponent.getModel();
+ switch (functionType) {
+ case GET_INPUT:
+ validateGetFunction(property, parentComponent.getInputs(), model);
+ break;
+ case GET_PROPERTY:
+ if (toscaGetFunction.getPropertySource() == PropertySource.SELF) {
+ validateGetFunction(property, parentComponent.getProperties(), model);
+ } else if (toscaGetFunction.getPropertySource() == PropertySource.INSTANCE) {
+ final ComponentInstance componentInstance =
+ parentComponent.getComponentInstanceById(toscaGetFunction.getSourceUniqueId())
+ .orElseThrow(ToscaGetFunctionExceptionSupplier.instanceNotFound(toscaGetFunction.getSourceName()));
+ validateGetFunction(property, componentInstance.getProperties(), model);
+ }
+ break;
+ case GET_ATTRIBUTE:
+ if (toscaGetFunction.getPropertySource() == PropertySource.SELF) {
+ validateGetFunction(property, combine(parentComponent.getProperties(), parentComponent.getAttributes()), model);
+ } else if (toscaGetFunction.getPropertySource() == PropertySource.INSTANCE) {
+ final ComponentInstance componentInstance = parentComponent.getComponentInstanceById(toscaGetFunction.getSourceUniqueId())
.orElseThrow(ToscaGetFunctionExceptionSupplier.instanceNotFound(toscaGetFunction.getSourceName()));
- validateGetFunction(property, componentInstance.getProperties(), parentComponent.getModel());
- }
-
- return;
- }
- if (toscaGetFunction.getFunctionType() == ToscaGetFunctionType.GET_ATTRIBUTE) {
- if (toscaGetFunction.getPropertySource() == PropertySource.SELF) {
- validateGetFunction(property, parentComponent.getAttributes(), parentComponent.getModel());
- } else if (toscaGetFunction.getPropertySource() == PropertySource.INSTANCE) {
- final ComponentInstance componentInstance =
- parentComponent.getComponentInstanceById(toscaGetFunction.getSourceUniqueId())
- .orElseThrow(ToscaGetFunctionExceptionSupplier.instanceNotFound(toscaGetFunction.getSourceName()));
- validateGetFunction(property, componentInstance.getAttributes(), parentComponent.getModel());
- }
-
- return;
+ validateGetFunction(property, combine(componentInstance.getProperties(), componentInstance.getAttributes()), model);
+ }
+ break;
+ default:
+ throw ToscaGetFunctionExceptionSupplier.functionNotSupported(functionType).get();
}
+ }
- throw ToscaGetFunctionExceptionSupplier.functionNotSupported(toscaGetFunction.getFunctionType()).get();
+ private List<? extends ToscaPropertyData> combine(final List<? extends ToscaPropertyData> parentProperties,
+ final List<? extends ToscaPropertyData> parentAttributes) {
+ if (CollectionUtils.isNotEmpty(parentProperties) && CollectionUtils.isNotEmpty(parentAttributes)) {
+ return Stream.concat(parentProperties.stream(), parentAttributes.stream()).collect(Collectors.toList());
+ }
+ if (CollectionUtils.isEmpty(parentProperties)) {
+ return parentAttributes;
+ }
+ return parentProperties;
}
private <T extends PropertyDataDefinition> void validateGetFunction(final T property,
- final List<? extends ToscaPropertyData> parentProperties,
- final String model) {
+ final List<? extends ToscaPropertyData> parentProperties,
+ final String model) {
final ToscaGetFunctionDataDefinition toscaGetFunction = (ToscaGetFunctionDataDefinition) property.getToscaFunction();
if (CollectionUtils.isEmpty(parentProperties)) {
throw ToscaGetFunctionExceptionSupplier
diff --git a/catalog-ui/src/app/models.ts b/catalog-ui/src/app/models.ts
index 7604b6797b..d2019426b0 100644
--- a/catalog-ui/src/app/models.ts
+++ b/catalog-ui/src/app/models.ts
@@ -18,10 +18,6 @@
* ============LICENSE_END=========================================================
*/
-/**
- * Created by ob0695 on 2/23/2017.
- */
-import from = require("core-js/fn/array/from");
export * from './models/activity';
export * from './models/additional-information';
export * from './models/app-config';
@@ -48,7 +44,6 @@ export * from './models/graph/zones/policy-instance';
export * from './models/graph/zones/zone';
export * from './models/graph/zones/zone-instance';
export * from './models/csar-component';
-//export * from './models/data-type-properties';
export * from './models/properties-inputs/property-be-model';
export * from './models/properties-inputs/property-fe-model';
export * from './models/properties-inputs/property-fe-map';
@@ -57,6 +52,15 @@ export * from './models/properties-inputs/property-declare-api-model';
export * from './models/properties-inputs/property-input-detail';
export * from './models/properties-inputs/input-fe-model';
export * from './models/properties-inputs/simple-flat-property';
+export * from './models/attributes-outputs/attribute-be-model';
+export * from './models/attributes-outputs/attribute-fe-model';
+export * from './models/attributes-outputs/attribute-fe-map';
+export * from './models/attributes-outputs/attribute-output-detail';
+export * from './models/attributes-outputs/attribute-declare-api-model';
+export * from './models/attributes-outputs/derived-fe-attribute';
+export * from './models/attributes-outputs/output-be-model';
+export * from './models/attributes-outputs/output-fe-model';
+export * from './models/attributes-outputs/simple-flat-attribute';
export * from './models/data-types-map';
export * from './models/data-types';
export * from './models/distribution';
@@ -128,4 +132,4 @@ export * from './models/relationship-types';
export * from './models/tosca-presentation';
export * from './models/node-types';
export * from './models/capability-types';
-export * from './models/service-csar'; \ No newline at end of file
+export * from './models/service-csar';
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 8f50cc14cd..64d155a55f 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
@@ -18,7 +18,7 @@
*/
import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';
-import {AttributeModel, ComponentMetadata, DataTypeModel, PropertyBEModel, PropertyModel} from 'app/models';
+import {AttributeBEModel, 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";
@@ -224,7 +224,7 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges {
this.startLoading();
const propertiesObservable: Observable<ComponentGenericResponse> = this.getPropertyObservable();
propertiesObservable.subscribe( (response: ComponentGenericResponse) => {
- const properties: Array<PropertyBEModel | AttributeModel> = this.extractProperties(response);
+ const properties: Array<PropertyBEModel | AttributeBEModel> = this.extractProperties(response);
if (!properties || properties.length === 0) {
const msgCode = this.getNotFoundMsgCode();
this.dropDownErrorMsg = this.translateService.translate(msgCode, {type: this.propertyTypeToString()});
@@ -267,22 +267,22 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges {
return this.property.type;
}
- private extractProperties(componentGenericResponse: ComponentGenericResponse): Array<PropertyBEModel | AttributeModel> {
+ private extractProperties(componentGenericResponse: ComponentGenericResponse): Array<PropertyBEModel | AttributeBEModel> {
if (this.isGetInput()) {
return componentGenericResponse.inputs;
}
- const propertySource = this.propertySource.value;
+ const instanceId = this.instanceNameAndIdMap.get(this.propertySource.value);
if (this.isGetProperty()) {
if (this.isPropertySourceSelf()) {
return componentGenericResponse.properties;
}
- const componentInstanceProperties: PropertyModel[] = componentGenericResponse.componentInstancesProperties[this.instanceNameAndIdMap.get(propertySource)];
- return this.removeSelectedProperty(componentInstanceProperties);
+ return this.removeSelectedProperty(componentGenericResponse.componentInstancesProperties[instanceId]);
}
if (this.isPropertySourceSelf()) {
- return componentGenericResponse.attributes;
+ return [...(componentGenericResponse.attributes || []), ...(componentGenericResponse.properties || [])];
}
- return componentGenericResponse.componentInstancesAttributes[this.instanceNameAndIdMap.get(propertySource)];
+ return [...(componentGenericResponse.componentInstancesAttributes[instanceId] || []),
+ ...(componentGenericResponse.componentInstancesProperties[instanceId] || [])];
}
private isPropertySourceSelf() {
@@ -301,9 +301,9 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges {
}
if (this.isGetAttribute()) {
if (this.isPropertySourceSelf()) {
- return this.topologyTemplateService.findAllComponentAttributes(this.componentMetadata.componentType, this.componentMetadata.uniqueId);
+ return this.topologyTemplateService.findAllComponentAttributesAndProperties(this.componentMetadata.componentType, this.componentMetadata.uniqueId);
}
- return this.topologyTemplateService.findAllComponentInstanceAttributes(this.componentMetadata.componentType, this.componentMetadata.uniqueId);
+ return this.topologyTemplateService.getComponentInstanceAttributesAndProperties(this.componentMetadata.uniqueId, this.componentMetadata.componentType);
}
}
@@ -322,7 +322,7 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges {
this.propertyDropdownList.sort((a, b) => a.propertyLabel.localeCompare(b.propertyLabel));
}
- private addPropertiesToDropdown(properties: Array<PropertyBEModel | AttributeModel>): void {
+ private addPropertiesToDropdown(properties: Array<PropertyBEModel | AttributeBEModel>): void {
for (const property of properties) {
if (this.hasSameType(property)) {
this.addPropertyToDropdown({
@@ -337,8 +337,8 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges {
}
}
- private fillPropertyDropdownWithMatchingChildProperties(inputProperty: PropertyBEModel | AttributeModel,
- parentPropertyList: Array<PropertyBEModel | AttributeModel> = []): void {
+ private fillPropertyDropdownWithMatchingChildProperties(inputProperty: PropertyBEModel | AttributeBEModel,
+ parentPropertyList: Array<PropertyBEModel | AttributeBEModel> = []): void {
const dataTypeFound: DataTypeModel = this.dataTypeService.getDataTypeByModelAndTypeName(this.componentMetadata.model, inputProperty.type);
if (!dataTypeFound || !dataTypeFound.properties) {
return;
@@ -358,7 +358,7 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges {
});
}
- private hasSameType(property: PropertyBEModel | AttributeModel) {
+ private hasSameType(property: PropertyBEModel | AttributeBEModel) {
if (this.typeHasSchema(this.property.type)) {
if (!property.schema || !property.schema.property) {
return false;
@@ -440,4 +440,4 @@ export interface PropertyDropdownValue {
export interface ToscaGetFunctionValidationEvent {
isValid: boolean,
toscaGetFunction: ToscaGetFunction,
-} \ No newline at end of file
+}
diff --git a/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts b/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts
index a2abb38f65..c497e013b4 100644
--- a/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts
+++ b/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts
@@ -163,6 +163,10 @@ export class TopologyTemplateService {
return this.getComponentDataByFieldsName(componentType, componentUniqueId, [COMPONENT_FIELDS.COMPONENT_ATTRIBUTES]);
}
+ findAllComponentAttributesAndProperties(componentType: string, componentUniqueId: string): Observable<ComponentGenericResponse> {
+ return this.getComponentDataByFieldsName(componentType, componentUniqueId, [COMPONENT_FIELDS.COMPONENT_ATTRIBUTES, COMPONENT_FIELDS.COMPONENT_PROPERTIES]);
+ }
+
getCapabilitiesAndRequirements(componentType: string, componentId: string): Observable<ComponentGenericResponse> {
return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_REQUIREMENTS, COMPONENT_FIELDS.COMPONENT_CAPABILITIES]);
}