From: JvD_Ericsson Date: Tue, 4 Jul 2023 13:45:53 +0000 (+0100) Subject: No properties found when trying to add a node filter to a VF X-Git-Tag: 1.13.6~22 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=sdc.git;a=commitdiff_plain;h=0d9d05e705a6fbc9c4370fdd3a8ad543d04f8210 No properties found when trying to add a node filter to a VF Issue-ID: SDC-4607 Signed-off-by: JvD_Ericsson Change-Id: I5df11e156f4bc20ff1d4f19b7af8dfe798631077 --- diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/validation/NodeFilterValidator.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/validation/NodeFilterValidator.java index a0716fe4ce..f75abf73a1 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/validation/NodeFilterValidator.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/validation/NodeFilterValidator.java @@ -17,6 +17,7 @@ * limitations under the License. * ============LICENSE_END========================================================= */ + package org.openecomp.sdc.be.components.validation; import com.google.gson.Gson; @@ -30,16 +31,19 @@ import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; import org.openecomp.sdc.be.datatypes.elements.ToscaGetFunctionDataDefinition; import org.openecomp.sdc.be.datatypes.enums.ConstraintType; +import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum; import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType; import org.openecomp.sdc.be.datatypes.enums.PropertySource; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.model.CapabilityDefinition; import org.openecomp.sdc.be.model.Component; import org.openecomp.sdc.be.model.ComponentInstance; +import org.openecomp.sdc.be.model.ComponentInstanceInput; import org.openecomp.sdc.be.model.ComponentInstanceProperty; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.InputDefinition; @@ -84,6 +88,28 @@ public class NodeFilterValidator { this.filterConstraintValidator = filterConstraintValidator; } + private static List getSelfPropertyFromGetFunction(final Component component, + final ToscaGetFunctionDataDefinition toscaGetFunction) { + switch (toscaGetFunction.getFunctionType()) { + case GET_INPUT: + if (component.getInputs() != null) { + return component.getInputs(); + } + break; + case GET_PROPERTY: + if (component.getProperties() != null) { + return component.getProperties(); + } + break; + case GET_ATTRIBUTE: + if (component.getAttributes() != null) { + return component.getAttributes(); + } + break; + } + return List.of(); + } + public Either validateComponentInstanceExist(final Component component, final String componentInstanceId) { if (component == null || StringUtils.isEmpty(componentInstanceId)) { LOGGER.error("Expecting a component and a component instance id, given was '{}' and '{}'", component, componentInstanceId); @@ -148,23 +174,20 @@ public class NodeFilterValidator { final List toscaGetFunctionList = filterConstraint.getAsListToscaGetFunction().orElse(null); if (toscaGetFunctionList == null || toscaGetFunctionList.isEmpty() || !(filterConstraint.getValue() instanceof List)) { return Either.right(componentsUtils.getResponseFormat(ActionStatus.TOSCA_FUNCTION_EXPECTED_ERROR)); - } - else { + } else { toscaGetFunctionDataDefinitionList = toscaGetFunctionList; } - } - else{ + } else { toscaGetFunctionDataDefinitionList.add(toscaGetFunction); } Boolean allGood = true; - for (ToscaGetFunctionDataDefinition _toscaGetFunction: toscaGetFunctionDataDefinitionList) { + for (ToscaGetFunctionDataDefinition _toscaGetFunction : toscaGetFunctionDataDefinitionList) { final Optional sourceSelectedProperty = findPropertyFromGetFunction(parentComponent, _toscaGetFunction); if (sourceSelectedProperty.isPresent()) { Optional targetComponentInstanceProperty = - getInstanceProperties(parentComponent, componentInstanceId, capabilityName, - filterConstraint.getPropertyName()); + getInstanceProperties(parentComponent, componentInstanceId, capabilityName, filterConstraint); source = targetComponentInstanceProperty.isEmpty() ? TARGET : SOURCE; if (targetComponentInstanceProperty.isPresent()) { @@ -176,8 +199,7 @@ public class NodeFilterValidator { break; } - } - else { + } else { allGood = false; final String missingProperty = SOURCE.equals(source) ? filterConstraint.getValue().toString() : filterConstraint.getPropertyName(); @@ -185,8 +207,7 @@ public class NodeFilterValidator { componentsUtils.getResponseFormat(ActionStatus.FILTER_PROPERTY_NOT_FOUND, source, missingProperty); break; } - } - else { + } else { allGood = false; final String missingProperty = SOURCE.equals(source) ? filterConstraint.getValue().toString() : filterConstraint.getPropertyName(); @@ -249,28 +270,6 @@ public class NodeFilterValidator { return instanceProperties; } - private static List getSelfPropertyFromGetFunction(final Component component, - final ToscaGetFunctionDataDefinition toscaGetFunction) { - switch (toscaGetFunction.getFunctionType()) { - case GET_INPUT: - if (component.getInputs() != null) { - return component.getInputs(); - } - break; - case GET_PROPERTY: - if (component.getProperties() != null) { - return component.getProperties(); - } - break; - case GET_ATTRIBUTE: - if (component.getAttributes() != null) { - return component.getAttributes(); - } - break; - } - return List.of(); - } - private Optional findSubProperty(final List propertyPath, final String parentPropertyType, final Map modelDataTypes) { final DataTypeDefinition dataTypeDefinition = modelDataTypes.get(parentPropertyType); @@ -288,11 +287,24 @@ public class NodeFilterValidator { return findSubProperty(propertyPath.subList(1, propertyPath.size()), propertyDefinition.getType(), modelDataTypes); } - private Optional getInstanceProperties(final Component parentComponent, final String componentInstanceId, - final String capabilityName, final String propertyName) { + private Optional getInstanceProperties(final Component parentComponent, final String componentInstanceId, + final String capabilityName, final FilterConstraintDto filterConstraint) { if (StringUtils.isEmpty(capabilityName)) { + OriginTypeEnum componentInstanceType = getComponentInstanceOriginType(parentComponent, componentInstanceId); + if (componentInstanceType == null) { + return Optional.empty(); + } + PropertyDefinition componentInstanceProperty = + getComponentInstanceProperty(componentInstanceType, parentComponent, componentInstanceId, filterConstraint); + if (componentInstanceProperty == null) { + throw new ByActionStatusComponentException(ActionStatus.SELECTED_PROPERTY_NOT_PRESENT, filterConstraint.getPropertyName()); + } + if (componentInstanceProperty instanceof ComponentInstanceInput) { + return parentComponent.getComponentInstancesInputs().get(componentInstanceId).stream() + .filter(property -> filterConstraint.getPropertyName().equals(property.getName())).findFirst(); + } return parentComponent.getComponentInstancesProperties().get(componentInstanceId).stream() - .filter(property -> propertyName.equals(property.getName())).findFirst(); + .filter(property -> filterConstraint.getPropertyName().equals(property.getName())).findFirst(); } else { final Optional componentInstanceOptional = parentComponent.getComponentInstances().stream() .filter(componentInstance -> componentInstance.getUniqueId().equals(componentInstanceId)).findAny(); @@ -300,7 +312,8 @@ public class NodeFilterValidator { for (final List listOfCaps : componentInstanceOptional.get().getCapabilities().values()) { final Optional capDef = listOfCaps.stream().filter(cap -> cap.getName().equals(capabilityName)).findAny(); if (capDef.isPresent()) { - return capDef.get().getProperties().stream().filter(property -> propertyName.equals(property.getName())).findFirst(); + return capDef.get().getProperties().stream().filter(property -> filterConstraint.getPropertyName().equals(property.getName())) + .findFirst(); } } } @@ -322,8 +335,7 @@ public class NodeFilterValidator { if (optValid.isPresent()) { return Either.right(componentsUtils.getResponseFormat(ActionStatus.TOSCA_FUNCTION_EXPECTED_ERROR)); } - } - else { + } else { return Either.right(componentsUtils.getResponseFormat(ActionStatus.TOSCA_FUNCTION_EXPECTED_ERROR)); } } @@ -414,9 +426,8 @@ public class NodeFilterValidator { } } return null; - } - else { - if (null != ((PropertyDefinition) sourcePropDefinition).getSchemaProperty()){ + } else { + if (null != ((PropertyDefinition) sourcePropDefinition).getSchemaProperty()) { if (((PropertyDefinition) sourcePropDefinition).getSchemaProperty().getType().equals(targetType)) { if (TYPES_WITH_SCHEMA.contains(((PropertyDefinition) sourcePropDefinition).getSchemaProperty().getType())) { final String sourceSchemaType = sourcePropDefinition.getSchemaType(); @@ -431,8 +442,7 @@ public class NodeFilterValidator { } } } - } - else { + } else { if (sourceType.equalsIgnoreCase("integer")) { if (TYPES_WITH_SCHEMA.contains(sourceType)) { final String sourceSchemaType = sourcePropDefinition.getSchemaType(); @@ -451,10 +461,12 @@ public class NodeFilterValidator { private Either validateStaticValueAndOperator(final Component parentComponent, final String componentInstanceId, final FilterConstraintDto filterConstraint) { - final ComponentInstanceProperty componentInstanceProperty = parentComponent.getComponentInstancesProperties() - .get(componentInstanceId).stream().filter(property -> filterConstraint.getPropertyName().equals(property.getName())) - .findFirst() - .orElse(null); + OriginTypeEnum componentInstanceType = getComponentInstanceOriginType(parentComponent, componentInstanceId); + if (componentInstanceType == null) { + return Either.right(componentsUtils.getResponseFormat(ActionStatus.COMPONENT_INSTANCE_NOT_FOUND, componentInstanceId)); + } + PropertyDefinition componentInstanceProperty = + getComponentInstanceProperty(componentInstanceType, parentComponent, componentInstanceId, filterConstraint); if (componentInstanceProperty == null) { return Either.right(componentsUtils.getResponseFormat(ActionStatus.SELECTED_PROPERTY_NOT_PRESENT, filterConstraint.getPropertyName())); } @@ -474,6 +486,34 @@ public class NodeFilterValidator { filterConstraint.getValue(), filterConstraint.getPropertyName()); } + private PropertyDefinition getComponentInstanceProperty(OriginTypeEnum componentInstanceType, Component parentComponent, + String componentInstanceId, FilterConstraintDto filterConstraint) { + if (isInput(componentInstanceType)) { + return parentComponent.getComponentInstancesInputs() + .get(componentInstanceId).stream().filter(input -> filterConstraint.getPropertyName().equals(input.getName())) + .findFirst() + .orElse(null); + } + return parentComponent.getComponentInstancesProperties() + .get(componentInstanceId).stream().filter(property -> filterConstraint.getPropertyName().equals(property.getName())) + .findFirst() + .orElse(null); + } + + private OriginTypeEnum getComponentInstanceOriginType(Component parentComponent, String componentInstanceId) { + Optional componentInstanceOptional = parentComponent.getComponentInstanceById(componentInstanceId); + if (componentInstanceOptional.isPresent()) { + ComponentInstance componentInstance = componentInstanceOptional.get(); + return componentInstance.getOriginType(); + } + return null; + } + + private boolean isInput(OriginTypeEnum instanceType) { + return OriginTypeEnum.VF.equals(instanceType) || OriginTypeEnum.PNF.equals(instanceType) || OriginTypeEnum.CVFC.equals(instanceType) || + OriginTypeEnum.CR.equals(instanceType); + } + private Either validateStaticSubstitutionFilter(final Component component, final FilterConstraintDto filterConstraint) { diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/validation/NodeFilterValidatorTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/validation/NodeFilterValidatorTest.java index ef5f7a0a84..cf6bc72256 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/validation/NodeFilterValidatorTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/validation/NodeFilterValidatorTest.java @@ -34,12 +34,14 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; import org.openecomp.sdc.be.config.ConfigurationManager; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; @@ -48,11 +50,13 @@ import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; import org.openecomp.sdc.be.datatypes.elements.ToscaGetFunctionDataDefinition; import org.openecomp.sdc.be.datatypes.enums.ConstraintType; import org.openecomp.sdc.be.datatypes.enums.FilterValueType; +import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum; import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType; import org.openecomp.sdc.be.datatypes.enums.PropertySource; import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.model.ComponentInstance; +import org.openecomp.sdc.be.model.ComponentInstanceInput; import org.openecomp.sdc.be.model.ComponentInstanceProperty; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; @@ -82,6 +86,33 @@ class NodeFilterValidatorTest { private NodeFilterValidator nodeFilterValidator; private FilterConstraintDto baseFilterConstraintDto; + protected static ToscaGetFunctionDataDefinition createToscaGetFunction(final String sourceName, + final PropertySource propertySource, + final ToscaGetFunctionType toscaGetFunctionType, + final List propertyPathFromSource, + final List toscaIndexList) { + final var toscaGetFunction = new ToscaGetFunctionDataDefinition(); + toscaGetFunction.setFunctionType(toscaGetFunctionType); + toscaGetFunction.setPropertyPathFromSource(propertyPathFromSource); + toscaGetFunction.setSourceName(sourceName); + toscaGetFunction.setPropertySource(propertySource); + toscaGetFunction.setPropertyName(propertyPathFromSource.get(0)); + toscaGetFunction.setToscaIndexList(toscaIndexList); + return toscaGetFunction; + } + + private static FilterConstraintDto buildFilterConstraintDto(final String propertyName, final FilterValueType valueType, + final ConstraintType constraintType, + final PropertyFilterTargetType targetType, Object value) { + final var filterConstraintDto = new FilterConstraintDto(); + filterConstraintDto.setPropertyName(propertyName); + filterConstraintDto.setValueType(valueType); + filterConstraintDto.setOperator(constraintType); + filterConstraintDto.setTargetType(targetType); + filterConstraintDto.setValue(value); + return filterConstraintDto; + } + @BeforeEach void setup() { componentsUtils = Mockito.mock(ComponentsUtils.class); @@ -106,9 +137,9 @@ class NodeFilterValidatorTest { assertEquals(expectedResponse, either.right().value()); Service service = createService("booleanIncorrect"); - when(componentsUtils.getResponseFormat(ActionStatus.COMPONENT_INSTANCE_NOT_FOUND, service.getName(), INNER_SERVICE)) + when(componentsUtils.getResponseFormat(ActionStatus.COMPONENT_INSTANCE_NOT_FOUND, service.getName(), "uniqueId")) .thenReturn(expectedResponse); - either = nodeFilterValidator.validateComponentInstanceExist(service, INNER_SERVICE); + either = nodeFilterValidator.validateComponentInstanceExist(service, "uniqueId"); assertTrue(either.isRight()); assertEquals(expectedResponse, either.right().value()); @@ -451,11 +482,8 @@ class NodeFilterValidatorTest { PropertyFilterTargetType.PROPERTY, toscaGetFunction ); - final Either validationResult = - nodeFilterValidator.validateFilter(service, COMPONENT1_ID, List.of(filterConstraintDto)); - - assertTrue(validationResult.isRight()); - assertEquals(expectedResponse, validationResult.right().value()); + Assertions.assertThrows(ComponentException.class, + () -> nodeFilterValidator.validateFilter(service, COMPONENT1_ID, List.of(filterConstraintDto))); } @Test @@ -474,26 +502,8 @@ class NodeFilterValidatorTest { final ResponseFormat expectedResponse = new ResponseFormat(); when(componentsUtils.getResponseFormat(ActionStatus.FILTER_PROPERTY_NOT_FOUND, "Target", PROPERTY_NAME)) .thenReturn(expectedResponse); - Either either = - nodeFilterValidator.validateFilter(service, COMPONENT1_ID, List.of(filterConstraintDto)); - - assertTrue(either.isRight()); - assertEquals(expectedResponse, either.right().value()); - } - - protected static ToscaGetFunctionDataDefinition createToscaGetFunction(final String sourceName, - final PropertySource propertySource, - final ToscaGetFunctionType toscaGetFunctionType, - final List propertyPathFromSource, - final List toscaIndexList) { - final var toscaGetFunction = new ToscaGetFunctionDataDefinition(); - toscaGetFunction.setFunctionType(toscaGetFunctionType); - toscaGetFunction.setPropertyPathFromSource(propertyPathFromSource); - toscaGetFunction.setSourceName(sourceName); - toscaGetFunction.setPropertySource(propertySource); - toscaGetFunction.setPropertyName(propertyPathFromSource.get(0)); - toscaGetFunction.setToscaIndexList(toscaIndexList); - return toscaGetFunction; + Assertions.assertThrows(ComponentException.class, + () -> nodeFilterValidator.validateFilter(service, COMPONENT1_ID, List.of(filterConstraintDto))); } @Test @@ -528,6 +538,71 @@ class NodeFilterValidatorTest { assertEquals(expectedResponse, either.right().value()); } + @Test + void testValidateNodeFilterForVfStaticValue() { + Service service = createService(ToscaPropertyType.INTEGER.getType()); + addComponentInstanceToService(service, OriginTypeEnum.VF, "vfInstance", ToscaPropertyType.INTEGER.getType()); + baseFilterConstraintDto.setValue(1); + Either validationResult = + nodeFilterValidator.validateFilter(service, "vfInstance", List.of(baseFilterConstraintDto)); + + assertTrue(validationResult.isLeft()); + } + + @Test + void testValidateNodeFilterForVfToscaGetProperty() { + Service service = createService(ToscaPropertyType.INTEGER.getType()); + addComponentInstanceToService(service, OriginTypeEnum.VF, "vfInstance", ToscaPropertyType.INTEGER.getType()); + final ToscaGetFunctionDataDefinition toscaGetFunction = + createToscaGetFunction(PARENT_SERVICE_ID, PropertySource.SELF, ToscaGetFunctionType.GET_PROPERTY, List.of(PROPERTY_NAME), null); + final var filterConstraintDto = buildFilterConstraintDto( + PROPERTY_NAME, + FilterValueType.GET_PROPERTY, + ConstraintType.EQUAL, + PropertyFilterTargetType.PROPERTY, + toscaGetFunction + ); + Either validationResult = + nodeFilterValidator.validateFilter(service, "vfInstance", List.of(filterConstraintDto)); + + assertTrue(validationResult.isLeft()); + } + + private void addComponentInstanceToService(Service service, OriginTypeEnum originTypeEnum, String instanceName, String type) { + ComponentInstance componentInstance = new ComponentInstance(); + componentInstance.setUniqueId(instanceName); + componentInstance.setName(instanceName); + componentInstance.setOriginType(originTypeEnum); + + List compInstances = new ArrayList<>(); + service.getComponentInstances().forEach(compInstance -> compInstances.add(compInstance)); + compInstances.add(componentInstance); + service.setComponentInstances(compInstances); + + if (isInput(originTypeEnum)) { + ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput(); + componentInstanceInput.setName(PROPERTY_NAME); + componentInstanceInput.setType(type); + if (service.getComponentInstancesInputs() == null) { + service.setComponentInstancesInputs(new HashMap<>()); + } + service.getComponentInstancesInputs().put(instanceName, Collections.singletonList(componentInstanceInput)); + } else { + ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty(); + componentInstanceProperty.setName(PROPERTY_NAME); + componentInstanceProperty.setType(type); + if (service.getComponentInstancesProperties() == null) { + service.setComponentInstancesProperties(new HashMap<>()); + } + service.getComponentInstancesProperties().put(instanceName, Collections.singletonList(componentInstanceProperty)); + } + } + + private boolean isInput(OriginTypeEnum instanceType) { + return OriginTypeEnum.VF.equals(instanceType) || OriginTypeEnum.PNF.equals(instanceType) || OriginTypeEnum.CVFC.equals(instanceType) || + OriginTypeEnum.CR.equals(instanceType); + } + private Service createService(String type) { return createService(type, null); } @@ -551,12 +626,19 @@ class NodeFilterValidatorTest { ComponentInstance componentInstance = new ComponentInstance(); componentInstance.setUniqueId(COMPONENT1_ID); componentInstance.setName(COMPONENT1_ID); + componentInstance.setOriginType(OriginTypeEnum.VFC); ComponentInstance componentInstance2 = new ComponentInstance(); componentInstance2.setUniqueId(COMPONENT2_ID); componentInstance2.setName(COMPONENT2_ID); + componentInstance2.setOriginType(OriginTypeEnum.VFC); + + ComponentInstance componentInstance3 = new ComponentInstance(); + componentInstance3.setUniqueId(INNER_SERVICE); + componentInstance3.setName(INNER_SERVICE); + componentInstance3.setOriginType(OriginTypeEnum.ServiceProxy); - service.setComponentInstances(Arrays.asList(componentInstance, componentInstance2)); + service.setComponentInstances(Arrays.asList(componentInstance, componentInstance2, componentInstance3)); ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty(); componentInstanceProperty.setName(PROPERTY_NAME); @@ -578,16 +660,4 @@ class NodeFilterValidatorTest { return service; } - private static FilterConstraintDto buildFilterConstraintDto(final String propertyName, final FilterValueType valueType, - final ConstraintType constraintType, - final PropertyFilterTargetType targetType, Object value) { - final var filterConstraintDto = new FilterConstraintDto(); - filterConstraintDto.setPropertyName(propertyName); - filterConstraintDto.setValueType(valueType); - filterConstraintDto.setOperator(constraintType); - filterConstraintDto.setTargetType(targetType); - filterConstraintDto.setValue(value); - return filterConstraintDto; - } - } diff --git a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts index 7ca4604004..ace5a18f22 100644 --- a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts +++ b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts @@ -26,13 +26,15 @@ import { Component as TopologyTemplate, FullComponentInstance, PropertiesGroup, - PropertyBEModel, PropertyModel, + PropertyBEModel, PropertyModel, ComponentInstance, } from 'app/models'; +import {ResourceType} from "app/utils"; import {DEPENDENCY_EVENTS} from 'app/utils/constants'; import {ComponentMetadata} from '../../../../../../models/component-metadata'; import {ServiceInstanceObject} from '../../../../../../models/service-instance-properties-and-interfaces'; import {EventListenerService} from '../../../../../../services/event-listener-service'; import {TopologyTemplateService} from '../../../../../services/component-services/topology-template.service'; +import {ComponentInstanceServiceNg2} from '../../../../../services/component-instance-services/component-instance.service'; import {ComponentGenericResponse} from '../../../../../services/responses/component-generic-response'; import {WorkspaceService} from '../../../../workspace/workspace.service'; import {SelectedComponentType} from '../../../common/store/graph.actions'; @@ -63,6 +65,7 @@ export class ServiceDependenciesTabComponent implements OnInit { constructor(private store: Store, private topologyTemplateService: TopologyTemplateService, + private componentInstanceServiceNg2: ComponentInstanceServiceNg2, private workspaceService: WorkspaceService, private compositionService: CompositionService, private eventListenerService: EventListenerService) { @@ -98,10 +101,22 @@ export class ServiceDependenciesTabComponent implements OnInit { } private initInstancesWithProperties = (): void => { - this.topologyTemplateService.getComponentInstanceProperties(this.metaData.componentType, this.metaData.uniqueId).subscribe((genericResponse: ComponentGenericResponse) => { - this.componentInstanceProperties = genericResponse.componentInstancesProperties; - this.updateInstanceAttributes(); - }); + if (this.component instanceof FullComponentInstance && this.isInput(this.component.resourceType)) { + this.componentInstanceServiceNg2 + .getComponentInstanceInputsByIdAndType(this.metaData.uniqueId, this.metaData.componentType, this.component as ComponentInstance) + .subscribe(response => { + this.selectedInstanceProperties = response; + }); + } else { + this.topologyTemplateService.getComponentInstanceProperties(this.metaData.componentType, this.metaData.uniqueId).subscribe((genericResponse: ComponentGenericResponse) => { + this.componentInstanceProperties = genericResponse.componentInstancesProperties; + this.updateInstanceAttributes(); + }); + } + } + + private isInput = (instanceType:string):boolean =>{ + return instanceType === ResourceType.VF || instanceType === ResourceType.PNF || instanceType === ResourceType.CVFC || instanceType === ResourceType.CR; } private updateInstanceAttributes = (): void => { 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 67df3e46e1..8c84c0e1a8 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 @@ -33,6 +33,7 @@ import {InstanceFeDetails} from "../../../../../models/instance-fe-details"; import {ToscaGetFunction} from "../../../../../models/tosca-get-function"; import {FormControl, FormGroup, Validators} from "@angular/forms"; import {ToscaGetFunctionTypeConverter} from "../../../../../models/tosca-get-function-type-converter"; +import {ResourceType} from "app/utils"; @Component({ selector: 'app-tosca-get-function', @@ -367,6 +368,10 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges { if (this.isPropertySourceSelf()) { return componentGenericResponse.properties; } + let componentInstanceInput = componentGenericResponse.componentInstances.find(compInst => this.isInput(compInst.originType) && compInst.uniqueId === instanceId); + if ( componentInstanceInput) { + return this.removeSelectedProperty(componentGenericResponse.componentInstancesInputs[instanceId]); + } return this.removeSelectedProperty(componentGenericResponse.componentInstancesProperties[instanceId]); } if (this.isPropertySourceSelf()) { @@ -376,6 +381,10 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges { ...(componentGenericResponse.componentInstancesProperties[instanceId] || [])]; } + private isInput (instanceType:string): boolean { + return instanceType === ResourceType.VF || instanceType === ResourceType.PNF || instanceType === ResourceType.CVFC || instanceType === ResourceType.CR; + } + private isPropertySourceSelf() { return this.propertySource.value === PropertySource.SELF; } @@ -388,7 +397,8 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges { if (this.isPropertySourceSelf()) { return this.topologyTemplateService.findAllComponentProperties(this.componentMetadata.componentType, this.componentMetadata.uniqueId); } - return this.topologyTemplateService.getComponentInstanceProperties(this.componentMetadata.componentType, this.componentMetadata.uniqueId); + return this.topologyTemplateService.getComponentInstancesAndInputsAndProperties(this.componentMetadata.componentType, this.componentMetadata.uniqueId); + // return this.topologyTemplateService.getComponentInstanceInputsAndProperties(this.componentMetadata.componentType, this.componentMetadata.uniqueId); } if (this.isGetAttribute()) { if (this.isPropertySourceSelf()) { diff --git a/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts b/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts index 1e4ddda9c0..c2258fd01e 100644 --- a/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts +++ b/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts @@ -72,7 +72,12 @@ export class ComponentInstanceServiceNg2 { } getComponentInstanceInputs(component: Component, componentInstance: ComponentInstance): Observable> { - return this.http.get>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/componentInstances/' + componentInstance.uniqueId + '/' + componentInstance.componentUid + '/inputs') + return this.getComponentInstanceInputsByIdAndType(component.uniqueId, component.componentType, componentInstance); + } + + + getComponentInstanceInputsByIdAndType(componentId: string, componentType:string, componentInstance: ComponentInstance): Observable> { + return this.http.get>(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/componentInstances/' + componentInstance.uniqueId + '/' + componentInstance.componentUid + '/inputs') .map(res => { return CommonUtils.initInputs(res); }) 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 405d2bb8af..fce785e9e6 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 @@ -480,6 +480,10 @@ export class TopologyTemplateService { return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES]); } + getComponentInstancesAndInputsAndProperties(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INSTANCES ,COMPONENT_FIELDS.COMPONENT_INSTANCES_INPUTS, COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES]); + } + findAllComponentInstanceAttributes(componentType: string, componentId: string): Observable { return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_ATTRIBUTES]); }