diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationBase.java')
1 files changed, 268 insertions, 275 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationBase.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationBase.java index f93d3714ca..a19075f050 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationBase.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationBase.java @@ -16,15 +16,26 @@ package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Predicate; +import java.util.stream.Collectors; + import org.apache.commons.collections4.CollectionUtils; +import org.onap.sdc.tosca.datatypes.model.RequirementAssignment; +import org.onap.sdc.tosca.datatypes.model.ServiceTemplate; import org.openecomp.sdc.common.errors.CoreException; import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate; import org.openecomp.sdc.heat.datatypes.model.Resource; import org.openecomp.sdc.tosca.datatypes.ToscaCapabilityType; import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType; import org.openecomp.sdc.tosca.datatypes.ToscaTopologyTemplateElements; -import org.onap.sdc.tosca.datatypes.model.RequirementAssignment; -import org.onap.sdc.tosca.datatypes.model.ServiceTemplate; import org.openecomp.sdc.tosca.services.DataModelUtil; import org.openecomp.sdc.tosca.services.ToscaConstants; import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext; @@ -38,303 +49,285 @@ import org.openecomp.sdc.translator.services.heattotosca.errors.ResourceNotFound import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Collectors; - public abstract class ResourceTranslationBase { - protected static Logger logger = LoggerFactory.getLogger(ResourceTranslationBase.class); - protected abstract void translate(TranslateTo translateTo); - - /** - * Translate resource. - * - * @param heatFileName the heat file name - * @param serviceTemplate the service template - * @param heatOrchestrationTemplate the heat orchestration template - * @param resource the resource - * @param resourceId the resource id - * @param context the context - * @return the translated id if this resource is supported, or empty value if not supported - */ - public Optional<String> translateResource(String heatFileName, ServiceTemplate serviceTemplate, - HeatOrchestrationTemplate heatOrchestrationTemplate, - Resource resource, String resourceId, - TranslationContext context) { - Optional<String> translatedId = - getResourceTranslatedId(heatFileName, heatOrchestrationTemplate, resourceId, context); - context.getTranslatedResources().putIfAbsent(heatFileName, new HashSet<>()); - - if (isResourceWithSameIdAppearsInOtherFiles(heatFileName, resourceId, context)) { - throw new CoreException( - new DuplicateResourceIdsInDifferentFilesErrorBuilder(resourceId).build()); - } - if (context.getTranslatedResources().get(heatFileName).contains(resourceId)) { - return translatedId; + protected static Logger logger = LoggerFactory.getLogger(ResourceTranslationBase.class); + + /** + * Gets resource translated id. + * + * @param heatFileName the heat file name + * @param heatOrchestrationTemplate the heat orchestration template + * @param resourceId the resource id + * @param context the context + * @return the resource translated id + */ + public static Optional<String> getResourceTranslatedId(String heatFileName, + HeatOrchestrationTemplate + heatOrchestrationTemplate, + String resourceId, + TranslationContext context) { + if (!context.getTranslatedIds().containsKey(heatFileName)) { + context.getTranslatedIds().put(heatFileName, new HashMap<>()); + } + + Map<String, String> translatedIdsPerFile = context.getTranslatedIds().get(heatFileName); + String translatedId = translatedIdsPerFile.get(resourceId); + if (translatedId != null) { + return Optional.of(translatedId); + } + + Resource resource = heatOrchestrationTemplate.getResources().get(resourceId); + if (resource == null) { + throw new CoreException( + new ResourceNotFoundInHeatFileErrorBuilder(resourceId, heatFileName).build()); + } + return getTranslatedResourceId(resourceId, heatFileName, resource, heatOrchestrationTemplate, + context + ); } - if (!translatedId.isPresent()) { - return Optional.empty(); + + private static Optional<String> getTranslatedResourceId(String resourceId, + String heatFileName, + Resource resource, + HeatOrchestrationTemplate heatOrchestrationTemplate, + TranslationContext context) { + TranslateTo translateTo = + generateTranslationTo(heatFileName, heatOrchestrationTemplate, resource, resourceId, + context); + + String translatedId = + ResourceTranslationFactory.getInstance(resource).generateTranslatedId(translateTo); + + if (ConsolidationDataUtil.isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates(translatedId, + heatFileName, context)) { + return Optional.empty(); + } + + if (translatedId != null) { + context.getTranslatedIds().get(heatFileName).put(resourceId, translatedId); + } + + return Optional.ofNullable(translatedId); } - logger.debug("Translate- file: {} resource Id: {} translated resource id: {}", - heatFileName, resourceId, translatedId.get()); - TranslateTo translateTo = new TranslateTo(heatFileName, serviceTemplate, - heatOrchestrationTemplate, resource, resourceId, translatedId.get(), context); - translate(translateTo); - context.getTranslatedResources().get(heatFileName).add(resourceId); - - if (DataModelUtil.isNodeTemplate(translatedId.get(), serviceTemplate)) { - if (!context.getHeatStackGroupMembers().containsKey(heatFileName)) { - context.getHeatStackGroupMembers().put(heatFileName, new HashSet<>()); - } - context.getHeatStackGroupMembers().get(heatFileName).add(translatedId.get()); - updateResourceDependency(translateTo); + + private static Optional<ToscaTopologyTemplateElements> getResourceTranslatedElementTemplate(String heatFileName, + HeatOrchestrationTemplate heatOrchestrationTemplate, + String resourceId, TranslationContext context) { + Resource resource = heatOrchestrationTemplate.getResources().get(resourceId); + if (resource == null) { + throw new CoreException( + new ResourceNotFoundInHeatFileErrorBuilder(resourceId, heatFileName).build()); + } + TranslateTo translateTo = + generateTranslationTo(heatFileName, heatOrchestrationTemplate, resource, resourceId, + context); + + return ResourceTranslationFactory.getInstance(resource) + .getTranslatedToscaTopologyElement(translateTo); } - return translatedId; - } - - private boolean isResourceWithSameIdAppearsInOtherFiles(String heatFileName, - String resourceId, - TranslationContext context) { - Set<String> translatedResourceIdsFromOtherFiles = - context.getTranslatedResourceIdsFromOtherFiles(heatFileName); - - return CollectionUtils.isNotEmpty(translatedResourceIdsFromOtherFiles) - && translatedResourceIdsFromOtherFiles.contains(resourceId); - } - - /** - * Gets resource translated id. - * - * @param heatFileName the heat file name - * @param heatOrchestrationTemplate the heat orchestration template - * @param resourceId the resource id - * @param context the context - * @return the resource translated id - */ - public static Optional<String> getResourceTranslatedId(String heatFileName, - HeatOrchestrationTemplate + + private static TranslateTo generateTranslationTo(String heatFileName, + HeatOrchestrationTemplate heatOrchestrationTemplate, - String resourceId, - TranslationContext context) { - if (!context.getTranslatedIds().containsKey(heatFileName)) { - context.getTranslatedIds().put(heatFileName, new HashMap<>()); + Resource resource, String resourceId, + TranslationContext context) { + TranslateTo to = new TranslateTo(); + to.setHeatFileName(heatFileName); + to.setServiceTemplate(null); + to.setHeatOrchestrationTemplate(heatOrchestrationTemplate); + to.setResource(resource); + to.setResourceId(resourceId); + to.setTranslatedId(null); + to.setContext(context); + return to; } - Map<String, String> translatedIdsPerFile = context.getTranslatedIds().get(heatFileName); - String translatedId = translatedIdsPerFile.get(resourceId); - if (translatedId != null) { - return Optional.of(translatedId); + protected abstract void translate(TranslateTo translateTo); + + /** + * Translate resource. + * + * @param heatFileName the heat file name + * @param serviceTemplate the service template + * @param heatOrchestrationTemplate the heat orchestration template + * @param resource the resource + * @param resourceId the resource id + * @param context the context + * @return the translated id if this resource is supported, or empty value if not supported + */ + public Optional<String> translateResource(String heatFileName, ServiceTemplate serviceTemplate, + HeatOrchestrationTemplate heatOrchestrationTemplate, + Resource resource, String resourceId, + TranslationContext context) { + Optional<String> translatedId = + getResourceTranslatedId(heatFileName, heatOrchestrationTemplate, resourceId, context); + context.getTranslatedResources().putIfAbsent(heatFileName, new HashSet<>()); + + if (isResourceWithSameIdAppearsInOtherFiles(heatFileName, resourceId, context)) { + throw new CoreException( + new DuplicateResourceIdsInDifferentFilesErrorBuilder(resourceId).build()); + } + if (context.getTranslatedResources().get(heatFileName).contains(resourceId)) { + return translatedId; + } + if (!translatedId.isPresent()) { + return Optional.empty(); + } + logger.debug("Translate- file: {} resource Id: {} translated resource id: {}", + heatFileName, resourceId, translatedId.get()); + TranslateTo translateTo = new TranslateTo(heatFileName, serviceTemplate, + heatOrchestrationTemplate, resource, resourceId, translatedId.get(), context); + translate(translateTo); + context.getTranslatedResources().get(heatFileName).add(resourceId); + + if (DataModelUtil.isNodeTemplate(translatedId.get(), serviceTemplate)) { + if (!context.getHeatStackGroupMembers().containsKey(heatFileName)) { + context.getHeatStackGroupMembers().put(heatFileName, new HashSet<>()); + } + context.getHeatStackGroupMembers().get(heatFileName).add(translatedId.get()); + updateResourceDependency(translateTo); + } + return translatedId; } - Resource resource = heatOrchestrationTemplate.getResources().get(resourceId); - if (resource == null) { - throw new CoreException( - new ResourceNotFoundInHeatFileErrorBuilder(resourceId, heatFileName).build()); - } - return getTranslatedResourceId(resourceId, heatFileName, resource, heatOrchestrationTemplate, - context - ); - } - - private static Optional<String> getTranslatedResourceId(String resourceId, - String heatFileName, - Resource resource, - HeatOrchestrationTemplate heatOrchestrationTemplate, - TranslationContext context) { - TranslateTo translateTo = - generateTranslationTo(heatFileName, null, heatOrchestrationTemplate, resource, resourceId, - null, context); - - String translatedId = - ResourceTranslationFactory.getInstance(resource).generateTranslatedId(translateTo); - - if (ConsolidationDataUtil.isNodeTemplatePointsToServiceTemplateWithoutNodeTemplates - (translatedId, heatFileName, context)) { - return Optional.empty(); - } + private boolean isResourceWithSameIdAppearsInOtherFiles(String heatFileName, + String resourceId, + TranslationContext context) { + Set<String> translatedResourceIdsFromOtherFiles = + context.getTranslatedResourceIdsFromOtherFiles(heatFileName); - if (translatedId != null) { - context.getTranslatedIds().get(heatFileName).put(resourceId, translatedId); + return CollectionUtils.isNotEmpty(translatedResourceIdsFromOtherFiles) + && translatedResourceIdsFromOtherFiles.contains(resourceId); } - return Optional.ofNullable(translatedId); - } - - - /** - * Gets resource translated element template. - * - * @param heatFileName the heat file name - * @param heatOrchestrationTemplate the heat orchestration template - * @param resourceId the resource id - * @param context the context - * @return the resource translated element template - */ - public static Optional<ToscaTopologyTemplateElements> getResourceTranslatedElementTemplate( - String heatFileName, - HeatOrchestrationTemplate heatOrchestrationTemplate, - String resourceId, TranslationContext context) { - Resource resource = heatOrchestrationTemplate.getResources().get(resourceId); - if (resource == null) { - throw new CoreException( - new ResourceNotFoundInHeatFileErrorBuilder(resourceId, heatFileName).build()); - } - TranslateTo translateTo = - generateTranslationTo(heatFileName, null, heatOrchestrationTemplate, resource, resourceId, - null, context); - - return ResourceTranslationFactory.getInstance(resource) - .getTranslatedToscaTopologyElement(translateTo); - } - - protected String generateTranslatedId(TranslateTo translateTo) { - if (isEssentialRequirementsValid(translateTo)) { - return translateTo.getResourceId(); - } else { - return null; + protected String generateTranslatedId(TranslateTo translateTo) { + if (isEssentialRequirementsValid(translateTo)) { + return translateTo.getResourceId(); + } else { + return null; + } + } - } + protected Optional<ToscaTopologyTemplateElements> getTranslatedToscaTopologyElement( + TranslateTo translateTo) { + if (isEssentialRequirementsValid(translateTo)) { + return Optional.of(ToscaTopologyTemplateElements.NODE_TEMPLATE); + } else { + return Optional.empty(); + } + } - protected Optional<ToscaTopologyTemplateElements> getTranslatedToscaTopologyElement( - TranslateTo translateTo) { - if (isEssentialRequirementsValid(translateTo)) { - return Optional.of(ToscaTopologyTemplateElements.NODE_TEMPLATE); - } else { - return Optional.empty(); + protected boolean isEssentialRequirementsValid(TranslateTo translateTo) { + return true; } - } - - protected boolean isEssentialRequirementsValid(TranslateTo translateTo) { - return true; - } - - private static TranslateTo generateTranslationTo(String heatFileName, - ServiceTemplate serviceTemplate, - HeatOrchestrationTemplate - heatOrchestrationTemplate, - Resource resource, String resourceId, - String translatedId, - TranslationContext context) { - TranslateTo to = new TranslateTo(); - to.setHeatFileName(heatFileName); - to.setServiceTemplate(serviceTemplate); - to.setHeatOrchestrationTemplate(heatOrchestrationTemplate); - to.setResource(resource); - to.setResourceId(resourceId); - to.setTranslatedId(translatedId); - to.setContext(context); - return to; - } - - private void updateResourceDependency(TranslateTo translateTo) { - - Resource resource = translateTo.getResource(); - if (resource.getDepends_on() == null) { - return; + + private void updateResourceDependency(TranslateTo translateTo) { + + Resource resource = translateTo.getResource(); + if (resource.getDepends_on() == null) { + return; + } + + if (resource.getDepends_on() instanceof List) { + List<String> dependsOnList = (List<String>) resource.getDepends_on(); + for (String dependsOnResourceId : dependsOnList) { + addDependency(dependsOnResourceId, translateTo); + } + } else { + String dependsOnResourceId = (String) resource.getDepends_on(); + addDependency(dependsOnResourceId, translateTo); + } } - if (resource.getDepends_on() instanceof List) { - List<String> dependsOnList = (List<String>) resource.getDepends_on(); - for (String dependsOnResourceId : dependsOnList) { - addDependOnRequirement(dependsOnResourceId, translateTo); - } - } else { - String dependsOnResourceId = (String) resource.getDepends_on(); - addDependOnRequirement(dependsOnResourceId, translateTo); + private void addDependency(String dependsOnResourceId, TranslateTo translateTo) { + String heatFileName = translateTo.getHeatFileName(); + HeatOrchestrationTemplate heatOrchestrationTemplate = translateTo + .getHeatOrchestrationTemplate(); + TranslationContext context = translateTo.getContext(); + + Optional<String> resourceTranslatedId = + getResourceTranslatedId(heatFileName, heatOrchestrationTemplate, dependsOnResourceId, + context); + + Optional<ToscaTopologyTemplateElements> resourceTranslatedElementTemplate = + getResourceTranslatedElementTemplate(heatFileName, heatOrchestrationTemplate, + dependsOnResourceId, context); + + if (resourceTranslatedId.isPresent() + && (resourceTranslatedElementTemplate.isPresent() + && resourceTranslatedElementTemplate.get() == ToscaTopologyTemplateElements.NODE_TEMPLATE)) { + Resource sourceResource = translateTo.getResource(); + Resource targetResource = HeatToToscaUtil.getResource(heatOrchestrationTemplate, dependsOnResourceId, + translateTo.getHeatFileName()); + if (isValidDependency(sourceResource, targetResource, translateTo)) { + addDependsOnRequirement(dependsOnResourceId, translateTo, resourceTranslatedId.get(), sourceResource, + targetResource); + } + } } - } - - private void addDependOnRequirement(String dependsOnResourceId, TranslateTo translateTo) { - String nodeTemplateId = translateTo.getTranslatedId(); - ServiceTemplate serviceTemplate = translateTo.getServiceTemplate(); - String heatFileName = translateTo.getHeatFileName(); - HeatOrchestrationTemplate heatOrchestrationTemplate = translateTo - .getHeatOrchestrationTemplate(); - TranslationContext context = translateTo.getContext(); - RequirementAssignment requirementAssignment = new RequirementAssignment(); - Optional<String> resourceTranslatedId = - getResourceTranslatedId(heatFileName, heatOrchestrationTemplate, dependsOnResourceId, - context); - - Optional<ToscaTopologyTemplateElements> resourceTranslatedElementTemplate = - getResourceTranslatedElementTemplate(heatFileName, heatOrchestrationTemplate, - dependsOnResourceId, context); - - if (resourceTranslatedId.isPresent() - && (resourceTranslatedElementTemplate.isPresent() && resourceTranslatedElementTemplate - .get() == ToscaTopologyTemplateElements.NODE_TEMPLATE)) { - Resource sourceResource = translateTo.getResource(); - Resource targetResource = HeatToToscaUtil - .getResource(heatOrchestrationTemplate, dependsOnResourceId, - translateTo.getHeatFileName()); - if (isValidDependency(sourceResource, targetResource, translateTo)) { - requirementAssignment.setNode(resourceTranslatedId.get()); + + private void addDependsOnRequirement(String dependsOnResourceId, TranslateTo translateTo, + String resourceTranslatedId, Resource sourceResource, + Resource targetResource) { + RequirementAssignment requirementAssignment = new RequirementAssignment(); + requirementAssignment.setNode(resourceTranslatedId); requirementAssignment.setCapability(ToscaCapabilityType.NATIVE_NODE); requirementAssignment.setRelationship(ToscaRelationshipType.NATIVE_DEPENDS_ON); - DataModelUtil.addRequirementAssignment( - serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId), - ToscaConstants.DEPENDS_ON_REQUIREMENT_ID, requirementAssignment); + DataModelUtil.addRequirementAssignment(translateTo.getServiceTemplate().getTopology_template() + .getNode_templates().get(translateTo.getTranslatedId()), + ToscaConstants.DEPENDS_ON_REQUIREMENT_ID, requirementAssignment); ConsolidationDataUtil - .updateNodesConnectedData(translateTo, dependsOnResourceId, targetResource, - sourceResource, nodeTemplateId, ToscaConstants.DEPENDS_ON_REQUIREMENT_ID, - requirementAssignment); - } + .updateNodesConnectedData(translateTo, dependsOnResourceId, targetResource, + sourceResource, translateTo.getTranslatedId(), ToscaConstants.DEPENDS_ON_REQUIREMENT_ID, + requirementAssignment); + } + + private boolean isValidDependency(Resource sourceResource, Resource targetResource, TranslateTo translateTo) { + return !(HeatToToscaUtil.isNestedResource(sourceResource) || HeatToToscaUtil.isNestedResource(targetResource)) + && HeatToToscaUtil.isValidDependsOnCandidate(sourceResource, targetResource, + ConsolidationEntityType.OTHER, translateTo.getContext()); + } + + Optional<List<Map.Entry<String, Resource>>> getResourceByTranslatedResourceId( + String heatFileName, + HeatOrchestrationTemplate heatOrchestrationTemplate, + String translatedResourceId, + TranslateTo translateTo, + String heatResourceType) { + List<Map.Entry<String, Resource>> list = heatOrchestrationTemplate.getResources().entrySet() + .stream() + .filter(entry -> getPredicatesForTranslatedIdToResourceId(heatFileName, + heatOrchestrationTemplate, translatedResourceId, translateTo.getContext(), + heatResourceType) + .stream() + .allMatch(p -> p.test(entry))) + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(list)) { + return Optional.empty(); + } else { + return Optional.of(list); + } } - } - - private boolean isValidDependency(Resource sourceResource, Resource targetResource, TranslateTo translateTo) { - return !(HeatToToscaUtil.isNestedResource(sourceResource) || HeatToToscaUtil.isNestedResource(targetResource)) - && HeatToToscaUtil.isValidDependsOnCandidate(sourceResource, targetResource, - ConsolidationEntityType.OTHER, translateTo.getContext()); - } - - Optional<List<Map.Entry<String, Resource>>> getResourceByTranslatedResourceId( - String heatFileName, - HeatOrchestrationTemplate heatOrchestrationTemplate, - String translatedResourceId, - TranslateTo translateTo, - String heatResourceType) { - List<Map.Entry<String, Resource>> list = heatOrchestrationTemplate.getResources().entrySet() - .stream() - .filter(entry -> getPredicatesForTranslatedIdToResourceId(heatFileName, - heatOrchestrationTemplate, translatedResourceId, translateTo.getContext(), - heatResourceType) - .stream() - .allMatch(p -> p.test(entry))) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(list)) { - return Optional.empty(); - } else { - return Optional.of(list); + + private List<Predicate<Map.Entry<String, Resource>>> getPredicatesForTranslatedIdToResourceId( + String heatFileName, HeatOrchestrationTemplate heatOrchestrationTemplate, + String translatedResourceId, TranslationContext context, String heatResourceType) { + List<Predicate<Map.Entry<String, Resource>>> list = new ArrayList<>(); + list.add(entry -> + entry.getValue().getType().equals(heatResourceType)); + list.add(entry -> { + Optional<String> resourceTranslatedId = + getResourceTranslatedId(heatFileName, heatOrchestrationTemplate, entry.getKey(), context); + return resourceTranslatedId.isPresent() + && resourceTranslatedId.get().equals(translatedResourceId); + }); + return list; + } + + boolean isUnsupportedResourceType(Resource resource, List<String> supportedTypes) { + return !Objects.nonNull(resource) || !supportedTypes.contains(resource.getType()); } - } - - private List<Predicate<Map.Entry<String, Resource>>> getPredicatesForTranslatedIdToResourceId( - String heatFileName, HeatOrchestrationTemplate heatOrchestrationTemplate, - String translatedResourceId, TranslationContext context, String heatResourceType) { - List<Predicate<Map.Entry<String, Resource>>> list = new ArrayList<>(); - list.add(entry -> - entry.getValue().getType().equals(heatResourceType)); - list.add(entry -> { - Optional<String> resourceTranslatedId = - getResourceTranslatedId(heatFileName, heatOrchestrationTemplate, entry.getKey(), context); - return resourceTranslatedId.isPresent() - && resourceTranslatedId.get().equals(translatedResourceId); - }); - return list; - } - - boolean isResourceTypeSupported(Resource resource, List<String> supporteTypes) { - return Objects.nonNull(resource) && supporteTypes.contains(resource.getType()); - } } |