From def9cf3577c1a8624ecb1e3fc8deb78b9717a4e7 Mon Sep 17 00:00:00 2001 From: vasraz Date: Fri, 9 Jun 2023 17:46:23 +0100 Subject: Fix bug Certifying a template with two connected services results in error (using service proxy in the relationship) Signed-off-by: Vasyl Razinkov Change-Id: I3abd7e497ad07573a873f1b0c44de4e42141caf1 Issue-ID: SDC-4529 --- .../be/tosca/CapabilityRequirementConverter.java | 5 +- .../openecomp/sdc/be/tosca/ToscaExportHandler.java | 66 +++++++++++----------- 2 files changed, 36 insertions(+), 35 deletions(-) (limited to 'catalog-be/src/main/java/org') diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabilityRequirementConverter.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabilityRequirementConverter.java index a074eb8145..df6495b3a2 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabilityRequirementConverter.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CapabilityRequirementConverter.java @@ -749,8 +749,9 @@ public class CapabilityRequirementConverter { logger.debug("Failed to get an origin component with uniqueId {}", instance.getActualComponentUid()); result = Either.right(false); } else { - result = Either.left(getOriginRes.left().value()); - componentsCache.put(getOriginRes.left().value().getUniqueId(), getOriginRes.left().value()); + final Component component = getOriginRes.left().value(); + result = Either.left(component); + componentsCache.put(component.getUniqueId(), component); } } return result; diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java index f85e435e1c..44da4f2500 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java @@ -282,7 +282,6 @@ public class ToscaExportHandler { representer.addClassTag(toscaTemplate.getClass(), Tag.MAP); representer.setPropertyUtils(new UnsortedPropertyUtils()); - Yaml yaml = new Yaml(representer, options); String yamlAsString = yaml.dumpAsMap(toscaTemplate); String sb = getConfiguration().getHeatEnvArtifactHeader() @@ -347,7 +346,8 @@ public class ToscaExportHandler { .collect(Collectors.toMap( PropertyDataDefinition::getName, s -> propertyConvertor.convertProperty(dataTypes, s, PropertyType.PROPERTY), - (toscaPropertyTobeValidated, toscaProperty) -> validateToscaProperty((List) dataTypeDefinition, toscaPropertyTobeValidated, + (toscaPropertyTobeValidated, toscaProperty) -> validateToscaProperty((List) dataTypeDefinition, + toscaPropertyTobeValidated, toscaProperty) ))); } @@ -525,9 +525,11 @@ public class ToscaExportHandler { } private boolean doNotExtendBaseType(final Component component) { - final Map serviceNodeTypesConfig = ConfigurationManager.getConfigurationManager().getConfiguration().getServiceBaseNodeTypes(); + final Map serviceNodeTypesConfig = ConfigurationManager.getConfigurationManager().getConfiguration() + .getServiceBaseNodeTypes(); List categories = component.getCategories(); - if (CollectionUtils.isNotEmpty(categories) && MapUtils.isNotEmpty(serviceNodeTypesConfig) && serviceNodeTypesConfig.get(categories.get(0).getName()) != null) { + if (CollectionUtils.isNotEmpty(categories) && MapUtils.isNotEmpty(serviceNodeTypesConfig) + && serviceNodeTypesConfig.get(categories.get(0).getName()) != null) { return serviceNodeTypesConfig.get(categories.get(0).getName()).isDoNotExtendBaseType(); } return false; @@ -1413,7 +1415,7 @@ public class ToscaExportHandler { try { final List> toscaRequirements = buildRequirements(component, componentInstance, requirementDefinitionList, originComponent, componentCache); - if (!toscaRequirements.isEmpty()) { + if (CollectionUtils.isNotEmpty(toscaRequirements)) { nodeTypeTemplate.setRequirements(toscaRequirements); } } catch (final Exception e) { @@ -1437,7 +1439,9 @@ public class ToscaExportHandler { for (RequirementCapabilityRelDef relationshipDefinition : filteredRelations) { final Map toscaTemplateRequirementMap = buildRequirement(componentInstance, originComponent, component.getComponentInstances(), relationshipDefinition, componentCache); - toscaRequirements.add(toscaTemplateRequirementMap); + if (MapUtils.isNotEmpty(toscaTemplateRequirementMap)) { + toscaRequirements.add(toscaTemplateRequirementMap); + } } return toscaRequirements; @@ -1457,12 +1461,13 @@ public class ToscaExportHandler { throws ToscaExportException { final Map> reqMap = fromOriginComponent.getRequirements(); - final CapabilityRequirementRelationship capabilityRequirementRelationship = relationshipDefinition - .getRelationships().get(0); + if (MapUtils.isEmpty(reqMap)) { + return new HashMap<>(); + } + final CapabilityRequirementRelationship capabilityRequirementRelationship = relationshipDefinition.getRelationships().get(0); final RelationshipInfo relationshipInfo = capabilityRequirementRelationship.getRelation(); - final ComponentInstance toInstance = instancesList.stream() - .filter(i -> relationshipDefinition.getToNode().equals(i.getUniqueId())) + final ComponentInstance toInstance = instancesList.stream().filter(i -> relationshipDefinition.getToNode().equals(i.getUniqueId())) .findFirst().orElse(null); if (toInstance == null) { final String errorMsg = String @@ -1471,12 +1476,10 @@ public class ToscaExportHandler { log.debug(errorMsg); throw new ToscaExportException(errorMsg); } - final Optional reqOpt = - findRequirement(fromOriginComponent, reqMap, relationshipInfo, fromInstance.getUniqueId()); + final Optional reqOpt = findRequirement(fromOriginComponent, reqMap, relationshipInfo, fromInstance.getUniqueId()); if (reqOpt.isEmpty()) { - final String errorMsg = String - .format("Failed to find a requirement with uniqueId %s on a component with uniqueId %s", - relationshipInfo.getRequirementUid(), fromOriginComponent.getUniqueId()); + final String errorMsg = String.format("Failed to find a requirement with uniqueId %s on a component with uniqueId %s", + relationshipInfo.getRequirementUid(), fromOriginComponent.getUniqueId()); log.debug(errorMsg); throw new ToscaExportException(errorMsg); } @@ -1488,8 +1491,7 @@ public class ToscaExportHandler { toscaOperationFacade.getToscaElement(toInstance.getActualComponentUid(), filter); if (getOriginRes.isRight()) { final String errorMsg = String.format( - "Failed to build substituted name for the requirement %s. " - + "Failed to get an origin component with uniqueId %s", + "Failed to build substituted name for the requirement %s. Failed to get an origin component with uniqueId %s", reqOpt.get().getName(), toInstance.getActualComponentUid()); log.debug(errorMsg); throw new ToscaExportException(errorMsg); @@ -1500,9 +1502,8 @@ public class ToscaExportHandler { if (capOpt.isEmpty()) { capOpt = findCapability(relationshipInfo, toOriginComponent, fromOriginComponent, reqOpt.get()); if (capOpt.isEmpty()) { - final String errorMsg = String - .format("Failed to find a capability with name %s on a component with uniqueId %s", - relationshipInfo.getCapability(), fromOriginComponent.getUniqueId()); + final String errorMsg = String.format("Failed to find a capability with name %s on a component with uniqueId %s", + relationshipInfo.getCapability(), fromOriginComponent.getUniqueId()); log.debug(errorMsg); throw new ToscaExportException(errorMsg); } @@ -1522,7 +1523,7 @@ public class ToscaExportHandler { RequirementDefinition requirement) { Optional cap = toOriginComponent.getCapabilities().get(requirement.getCapability()) .stream().filter(c -> c.getType().equals(requirement.getCapability())).findFirst(); - if (!cap.isPresent()) { + if (cap.isEmpty()) { log.debug("Failed to find a capability with name {} on a component with uniqueId {}", reqAndRelationshipPair.getCapability(), fromOriginComponent.getUniqueId()); } @@ -1579,10 +1580,9 @@ public class ToscaExportHandler { Map> reqMap, RelationshipInfo reqAndRelationshipPair, String fromInstanceId) { - for (List reqList : reqMap.values()) { - Optional reqOpt = reqList.stream().filter( - r -> isRequirementBelongToRelation(fromOriginComponent, reqAndRelationshipPair, r, fromInstanceId)) - .findFirst(); + for (final List reqList : reqMap.values()) { + final Optional reqOpt = reqList.stream() + .filter(r -> isRequirementBelongToRelation(fromOriginComponent, reqAndRelationshipPair, r, fromInstanceId)).findFirst(); if (reqOpt.isPresent()) { return reqOpt; } @@ -1778,19 +1778,18 @@ public class ToscaExportHandler { if (((List) filterConstraint.getValue()).get(0) instanceof ToscaFunction) { List toscaFunctionList = new ArrayList<>(); ((List) filterConstraint.getValue()).forEach(toscaFunctionValue -> toscaFunctionList.add( - ((ToscaFunction) toscaFunctionValue).getJsonObjectValue())); + ((ToscaFunction) toscaFunctionValue).getJsonObjectValue())); return Map.of(filterConstraint.getOperator().getType(), toscaFunctionList); } } if (doesTypeNeedConvertingToIntOrFloat(filterConstraint.getOriginalType(), filterConstraint.getValue())) { ToscaType toscaType = ToscaType.getToscaType( - filterConstraint.getValue() instanceof List ? ToscaType.LIST.getType() : filterConstraint.getOriginalType()); + filterConstraint.getValue() instanceof List ? ToscaType.LIST.getType() : filterConstraint.getOriginalType()); filterConstraint.setValue(toscaType.convert(String.valueOf(filterConstraint.getValue()))); - } - else if (ConstraintType.LENGTH.getType().equals(filterConstraint.getOperator().getType()) || - ConstraintType.MIN_LENGTH.getType().equals(filterConstraint.getOperator().getType()) || - ConstraintType.MAX_LENGTH.getType().equals(filterConstraint.getOperator().getType())) { - filterConstraint.setValue(Integer.valueOf(String.valueOf(filterConstraint.getValue()))); + } else if (ConstraintType.LENGTH.getType().equals(filterConstraint.getOperator().getType()) || + ConstraintType.MIN_LENGTH.getType().equals(filterConstraint.getOperator().getType()) || + ConstraintType.MAX_LENGTH.getType().equals(filterConstraint.getOperator().getType())) { + filterConstraint.setValue(Integer.valueOf(String.valueOf(filterConstraint.getValue()))); } if (doesTypeNeedConvertingToBoolean(filterConstraint.getOriginalType())) { filterConstraint.setValue(ToscaType.getToscaType(filterConstraint.getOriginalType()).convert( @@ -1800,7 +1799,8 @@ public class ToscaExportHandler { } private static boolean doesTypeNeedConvertingToIntOrFloat(String propertyType, Object value) { - if (value instanceof List && ((List) value).get(0) instanceof LinkedHashMap && ((LinkedHashMap) ((List) value).get(0)).get("type") != null ) { + if (value instanceof List && ((List) value).get(0) instanceof LinkedHashMap + && ((LinkedHashMap) ((List) value).get(0)).get("type") != null) { return false; } return ToscaType.INTEGER.getType().equals(propertyType) || ToscaType.FLOAT.getType().equals(propertyType); -- cgit 1.2.3-korg