summaryrefslogtreecommitdiffstats
path: root/catalog-be
diff options
context:
space:
mode:
authorandre.schmid <andre.schmid@est.tech>2022-06-15 15:30:40 +0100
committerMichael Morris <michael.morris@est.tech>2022-06-22 20:36:22 +0000
commit7a7b13726c195e2944ccc59e4d5c5ade57318763 (patch)
treec22384a2abfc24adeb1c69a3696cda15c8e37548 /catalog-be
parentfbab79aeaccf74385c9a55b697a1055a86bdf171 (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-be')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java30
-rw-r--r--catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java53
-rw-r--r--catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml9
3 files changed, 33 insertions, 59 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java
index ab01b99957..4bf81727e6 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogic.java
@@ -107,6 +107,7 @@ import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
import org.openecomp.sdc.be.model.RequirementDefinition;
import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.Service;
+import org.openecomp.sdc.be.model.ToscaPropertyData;
import org.openecomp.sdc.be.model.User;
import org.openecomp.sdc.be.model.jsonjanusgraph.config.ContainerInstanceTypesData;
import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ArtifactsOperations;
@@ -2387,13 +2388,25 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic {
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;
+ }
throw ToscaGetFunctionExceptionSupplier.functionNotSupported(toscaGetFunction.getFunctionType()).get();
}
- private <T extends PropertyDefinition, U extends PropertyDefinition> void validateGetFunction(final T property,
- final List<U> parentProperties,
- final String model) {
+ private <T extends PropertyDefinition> void validateGetFunction(final T property,
+ final List<? extends ToscaPropertyData> parentProperties,
+ final String model) {
final ToscaGetFunctionDataDefinition toscaGetFunction = property.getToscaGetFunction();
if (CollectionUtils.isEmpty(parentProperties)) {
throw ToscaGetFunctionExceptionSupplier
@@ -2402,7 +2415,7 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic {
).get();
}
final String getFunctionPropertyUniqueId = toscaGetFunction.getPropertyUniqueId();
- T referredProperty = (T) parentProperties.stream()
+ ToscaPropertyData referredProperty = parentProperties.stream()
.filter(property1 -> getFunctionPropertyUniqueId.equals(property1.getUniqueId()))
.findFirst()
.orElseThrow(ToscaGetFunctionExceptionSupplier
@@ -2423,8 +2436,9 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic {
}
}
- private <T extends PropertyDefinition> T findSubProperty(final T referredProperty, final ToscaGetFunctionDataDefinition toscaGetFunction,
- final String model) {
+ private ToscaPropertyData findSubProperty(final ToscaPropertyData referredProperty,
+ final ToscaGetFunctionDataDefinition toscaGetFunction,
+ final String model) {
final Map<String, DataTypeDefinition> dataTypeMap = loadDataTypes(model);
final List<String> propertyPathFromSource = toscaGetFunction.getPropertyPathFromSource();
DataTypeDefinition dataType = dataTypeMap.get(referredProperty.getType());
@@ -2432,10 +2446,10 @@ public class ComponentInstanceBusinessLogic extends BaseBusinessLogic {
throw ToscaGetFunctionExceptionSupplier
.propertyDataTypeNotFound(propertyPathFromSource.get(0), referredProperty.getType(), toscaGetFunction.getFunctionType()).get();
}
- T foundProperty = referredProperty;
+ ToscaPropertyData foundProperty = referredProperty;
for (int i = 1; i < propertyPathFromSource.size(); i++) {
final String currentPropertyName = propertyPathFromSource.get(i);
- foundProperty = (T) dataType.getProperties().stream()
+ foundProperty = dataType.getProperties().stream()
.filter(propertyDefinition -> currentPropertyName.equals(propertyDefinition.getName())).findFirst()
.orElseThrow(
ToscaGetFunctionExceptionSupplier
diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java
index bf3ec3cb7e..cd916d0d1e 100644
--- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java
+++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java
@@ -678,54 +678,6 @@ class ComponentInstanceBusinessLogicTest {
assertEquals(expectedResponse.getStatus(), actualResponse.getStatus());
}
- @Test
- void testToscaGetFunctionValidation_toscaFunctionNotSupportedTest() {
- final String userId = "userId";
- final String containerComponentId = "containerComponentId";
- final String containerComponentName = "containerComponentName";
- final String resourceInstanceId = "resourceInstanceId";
- final List<ComponentInstanceProperty> properties = new ArrayList<>();
- final ComponentInstanceProperty propertyGetInput = new ComponentInstanceProperty();
- propertyGetInput.setName("anyName");
- final var toscaGetFunction = new ToscaGetFunctionDataDefinition();
- toscaGetFunction.setFunctionType(ToscaGetFunctionType.GET_ATTRIBUTE);
- toscaGetFunction.setPropertySource(PropertySource.SELF);
- toscaGetFunction.setPropertyPathFromSource(List.of("sourcePath"));
- toscaGetFunction.setSourceName("sourceName");
- toscaGetFunction.setSourceUniqueId("sourceUniqueId");
- toscaGetFunction.setPropertyName("propertyName");
- toscaGetFunction.setPropertyUniqueId("propertyId");
- propertyGetInput.setToscaGetFunction(toscaGetFunction);
- properties.add(propertyGetInput);
-
- final Component component = new Service();
- component.setName(containerComponentName);
- component.setUniqueId(containerComponentId);
- component.setLastUpdaterUserId(userId);
- component.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
-
- final Map<String, List<ComponentInstanceProperty>> componentInstanceProps = new HashMap<>();
- componentInstanceProps.put(resourceInstanceId, properties);
- component.setComponentInstancesProperties(componentInstanceProps);
-
- final ComponentInstance resourceInstance = createComponentInstance("componentInstance1");
- resourceInstance.setUniqueId(resourceInstanceId);
- component.setComponentInstances(List.of(resourceInstance));
-
- mockComponentForToscaGetFunctionValidation(component);
- //when
- final Either<List<ComponentInstanceProperty>, ResponseFormat> responseFormatEither =
- componentInstanceBusinessLogic
- .createOrUpdatePropertiesValues(ComponentTypeEnum.RESOURCE_INSTANCE, containerComponentId, resourceInstanceId, properties, userId);
- //then
- assertTrue(responseFormatEither.isRight(), "Expecting an error");
- final ResponseFormat actualResponse = responseFormatEither.right().value();
- final ResponseFormat expectedResponse = ToscaGetFunctionExceptionSupplier
- .functionNotSupported(toscaGetFunction.getFunctionType()).get().getResponseFormat();
- assertEquals(expectedResponse.getFormattedMessage(), actualResponse.getFormattedMessage());
- assertEquals(expectedResponse.getStatus(), actualResponse.getStatus());
- }
-
@ParameterizedTest
@MethodSource("getToscaFunctionForValidation")
void testToscaGetFunctionValidation_AttributesNotFoundTest(final ToscaGetFunctionDataDefinition toscaGetFunction,
@@ -762,9 +714,8 @@ class ComponentInstanceBusinessLogicTest {
//then
assertTrue(responseFormatEither.isRight(), "Expecting an error");
final ResponseFormat actualResponse = responseFormatEither.right().value();
- final ResponseFormat expectedResponse = expectedValidationResponse;
- assertEquals(expectedResponse.getFormattedMessage(), actualResponse.getFormattedMessage());
- assertEquals(expectedResponse.getStatus(), actualResponse.getStatus());
+ assertEquals(expectedValidationResponse.getFormattedMessage(), actualResponse.getFormattedMessage());
+ assertEquals(expectedValidationResponse.getStatus(), actualResponse.getStatus());
}
@Test
diff --git a/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml b/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml
index 2100dc8292..293bd49632 100644
--- a/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml
+++ b/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml
@@ -2392,3 +2392,12 @@ errors:
message: "The %1 '%2' type '%3' was not found.",
messageId: "SVC4170"
}
+
+ #-----------SVC4172---------------------------
+ #%1 - TOSCA function attribute
+ TOSCA_FUNCTION_MISSING_ATTRIBUTE: {
+ code: 400,
+ message: "Missing TOSCA function '%1'.",
+ messageId: "SVC4172"
+ }
+