From dece2c1d9149fce088669baa9621e7e4a6ce093a Mon Sep 17 00:00:00 2001 From: eleonorali Date: Wed, 11 Jul 2018 20:15:47 +0300 Subject: Nested input params appears in MainServiceTemplate When Nested heat belongs to Volume HEAT and Volume Heat was associated to main HEAT (parent) input parameters came from such nested were appear in MainServiceTemplate.yaml (TOSCA) Also these parameters had annotation in nestedServiceTemplate.yaml Change-Id: I46fff53de502c7ec48b6e4c26087121be89dd0a1 Issue-ID: SDC-1498 Signed-off-by: eleonorali --- .../services/heattotosca/HeatToToscaUtil.java | 75 +++++++++++++++------- .../services/heattotosca/TranslationService.java | 41 ++++-------- 2 files changed, 65 insertions(+), 51 deletions(-) (limited to 'openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main') diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java index f2773ae01f..bd8b558f11 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java @@ -213,7 +213,7 @@ public class HeatToToscaUtil { List fileDataList = context.getManifest().getContent().getData(); for (FileData fileData : fileDataList) { if (TranslationService.getTypesToProcessByTranslator().contains(fileData.getType()) && fileData.getFile() - .equals(heatFileName)) { + .equals(heatFileName)) { return fileData; } } @@ -225,7 +225,6 @@ public class HeatToToscaUtil { FileDataCollection fileDataCollection = new FileDataCollection(); Map filteredFiles = filterFileDataListByType(fileDataList, typeFilter); Set referenced = new HashSet<>(); - for (FileData fileData : filteredFiles.values()) { String fileName = fileData.getFile(); @@ -236,8 +235,8 @@ public class HeatToToscaUtil { HeatOrchestrationTemplate heatOrchestrationTemplate = new YamlUtil().yamlToObject( translationContext.getFileContent(fileName), HeatOrchestrationTemplate.class); if (MapUtils.isNotEmpty(heatOrchestrationTemplate.getResources())) { - applyFilterOnFileCollection(heatOrchestrationTemplate, translationContext, fileDataCollection, - filteredFiles, referenced); + referenced.addAll(applyFilterOnFileCollection(heatOrchestrationTemplate, translationContext, + fileDataCollection, filteredFiles)); } } else { @@ -246,7 +245,9 @@ public class HeatToToscaUtil { } } + referenced.addAll(getAssociatedFiles(filteredFiles.values())); referenced.forEach(filteredFiles::remove); + if (!CollectionUtils.isEmpty(fileDataCollection.getBaseFile())) { for (FileData fileData : fileDataCollection.getBaseFile()) { filteredFiles.remove(fileData.getFile()); @@ -256,54 +257,80 @@ public class HeatToToscaUtil { return fileDataCollection; } - private static void applyFilterOnFileCollection(HeatOrchestrationTemplate heatOrchestrationTemplate, + private static Set getAssociatedFiles(Collection filteredFiles) { + Set associatedFiles = new HashSet<>(); + filteredFiles.stream().filter(file -> file.getParentFile() != null + && FileData.Type.canBeAssociated(file.getType())) + .forEach(file -> associatedFiles.add(file.getFile())); + return associatedFiles; + } + + private static Set applyFilterOnFileCollection(HeatOrchestrationTemplate heatOrchestrationTemplate, TranslationContext translationContext, FileDataCollection fileDataCollection, - Map filteredFiles, - Set referenced) { + Map filteredFiles) { + Set nestedFiles = new HashSet<>(); List filenames = extractFilenamesFromFileDataList(filteredFiles.values()); - for (Resource resource : heatOrchestrationTemplate.getResources().values()) { - if (filenames.contains(resource.getType())) { - handleNestedFile(translationContext, fileDataCollection, filteredFiles, referenced, resource.getType()); - } else if (resource.getType().equals(HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource())) { - handleResourceGrpNestedFile(resource, translationContext, fileDataCollection, filteredFiles, filenames, - referenced); + String resourceType = resource.getType(); + if (filenames.contains(resourceType)) { + handleNestedFile(translationContext, fileDataCollection, filteredFiles, resourceType); + nestedFiles.add(resourceType); + } else if (resourceType.equals(HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource())) { + Optional nestedFile = handleResourceGrpNestedFile(resource, translationContext, + fileDataCollection, filteredFiles, filenames); + nestedFile.ifPresent(nestedFiles::add); } } + return nestedFiles; } - private static void handleResourceGrpNestedFile(Resource resource, TranslationContext translationContext, - FileDataCollection fileDataCollection, - Map filteredFiles, List filenames, - Set referenced) { + private static Optional handleResourceGrpNestedFile(Resource resource, TranslationContext + translationContext, FileDataCollection fileDataCollection, + Map filteredFiles, List filenames) { Object resourceDef = resource.getProperties().get(HeatConstants.RESOURCE_DEF_PROPERTY_NAME); Object innerTypeDef = ((Map) resourceDef).get(HeatConstants.RESOURCE_DEF_TYPE_PROPERTY_NAME); if (innerTypeDef instanceof String) { String internalResourceType = (String) innerTypeDef; if (filenames.contains(internalResourceType)) { - handleNestedFile(translationContext, fileDataCollection, filteredFiles, referenced, + handleNestedFile(translationContext, fileDataCollection, filteredFiles, internalResourceType); + return Optional.of(internalResourceType); } } + return Optional.empty(); } private static void handleNestedFile(TranslationContext translationContext, FileDataCollection fileDataCollection, - Map filteredFiles, Set referenced, + Map filteredFiles, String nestedFileName) { - referenced.add(nestedFileName); fileDataCollection.addNestedFiles(filteredFiles.get(nestedFileName)); translationContext.getNestedHeatsFiles().add(nestedFileName); } - private static Map filterFileDataListByType(List fileDataList, - Set typesToGet) { + private static Map filterFileDataListByType(List fileDataList, + Set typesToGet) { Map filtered = new HashMap<>(); - fileDataList.stream().filter(file -> typesToGet.contains(file.getType())) - .forEach(file -> filtered.put(file.getFile(), file)); + filterFileDataListByType(fileDataList, filtered, typesToGet, null); return filtered; } + private static void filterFileDataListByType(List fileDataList, Map filtered, + Set typesToGet, String parentFileName) { + fileDataList.stream().filter(file -> typesToGet.contains(file.getType())) + .forEach(file -> { + filtered.put(file.getFile(), file); + file.setParentFile(parentFileName); + }); + + Set canBeAssociatedTypes = typesToGet.stream() + .filter(FileData.Type::canBeAssociated).collect(Collectors.toSet()); + + fileDataList.stream().filter(file -> Objects.nonNull(file.getData())) + .forEach(file -> filterFileDataListByType(file.getData(), filtered, + canBeAssociatedTypes, file.getFile())); + } + private static List extractFilenamesFromFileDataList(Collection fileDataList) { return fileDataList.stream().map(FileData::getFile).collect(Collectors.toList()); } diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java index ee0cee6bab..2a845fb06a 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java @@ -131,34 +131,21 @@ public class TranslationService { */ public void translateHeatFile(ServiceTemplate serviceTemplate, FileData heatFileData, TranslationContext context) { - translateHeatFile(serviceTemplate, heatFileData, null, context); - } - - /** - * Translate heat file. - * - * @param serviceTemplate the service template - * @param heatFileData the current heat file data - * @param parentHeatFileName the main heat to which associated current heat file (e.g. volume heat) - * @param context the context - */ - public void translateHeatFile(ServiceTemplate serviceTemplate, FileData heatFileData, String parentHeatFileName, - TranslationContext context) { String heatFileName = heatFileData.getFile(); HeatOrchestrationTemplate heatOrchestrationTemplate = new YamlUtil() .yamlToObject(context.getFileContent(heatFileName), HeatOrchestrationTemplate.class); translateInputParameters(serviceTemplate, heatOrchestrationTemplate, heatFileData, context, - heatFileName, parentHeatFileName); + heatFileName); + translateResources(heatFileName, serviceTemplate, heatOrchestrationTemplate, context); translateOutputParameters(serviceTemplate, heatOrchestrationTemplate, heatFileData, heatFileName, context); createHeatStackGroup(serviceTemplate, heatFileData, heatOrchestrationTemplate, context); handleHeatPseudoParam(heatFileName, serviceTemplate, context); - if (Objects.nonNull(heatFileData.getData())) { - heatFileData.getData().stream().filter(data -> data.getType() == FileData.Type.HEAT_VOL) - .forEach(data -> translateHeatFile(serviceTemplate, data, heatFileData.getFile(), context)); + heatFileData.getData().stream().filter(data -> FileData.Type.canBeAssociated(data.getType())) + .forEach(data -> translateHeatFile(serviceTemplate, data, context)); } } @@ -244,7 +231,7 @@ public class TranslationService { private void translateInputParameters(ServiceTemplate serviceTemplate, HeatOrchestrationTemplate heatOrchestrationTemplate, FileData heatFileData, TranslationContext context, - String heatFileName, String parentHeatFileName) { + String heatFileName) { if (heatOrchestrationTemplate.getParameters() == null) { return; } @@ -252,7 +239,7 @@ public class TranslationService { Map parameterDefinitionMap = TranslatorHeatToToscaParameterConverter .parameterConverter(serviceTemplate, heatOrchestrationTemplate.getParameters(), - heatOrchestrationTemplate, heatFileName, parentHeatFileName, context); + heatOrchestrationTemplate, heatFileName, heatFileData.getParentFile(), context); Environment heatEnvFile = getHeatEnvFile(heatFileData, context); Map parameters = heatEnvFile.getParameters(); Object parameterValue; @@ -286,19 +273,19 @@ public class TranslationService { } - private void updateAnnotations(Map inputParameters, Map newParameters) { - + private void updateAnnotations(Map inputParameters, Map newParameters) { newParameters.entrySet().stream().filter(stringParameterDefinitionEntry -> - inputParameters.containsKey(stringParameterDefinitionEntry.getKey()) && - isHasAnnotation(inputParameters, stringParameterDefinitionEntry)). - forEach(stringParameterDefinitionEntry -> { - List inputParamVFModuleList = getVFModulesList(inputParameters.get(stringParameterDefinitionEntry.getKey())); + inputParameters.containsKey(stringParameterDefinitionEntry.getKey()) + && isHasAnnotation(inputParameters, stringParameterDefinitionEntry)) + .forEach(stringParameterDefinitionEntry -> { + List inputParamVFModuleList = getVFModulesList( + inputParameters.get(stringParameterDefinitionEntry.getKey())); List newParamVFModuleList = getVFModulesList(stringParameterDefinitionEntry.getValue()); - if(inputParamVFModuleList.contains(newParamVFModuleList.get(0))){ + if (inputParamVFModuleList.contains(newParamVFModuleList.get(0))) { newParamVFModuleList.remove(0); } newParamVFModuleList.addAll(inputParamVFModuleList); - }); } -- cgit 1.2.3-korg