X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=catalog-be%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fsdc%2Fbe%2Fcomponents%2Fcsar%2FServiceCsarInfo.java;h=7837588178ce844787525424e8afa11f69adc814;hb=216ea4998de9ae4ee603d7f8f5f6725b218ca710;hp=8dfe106713d396c9fcf45b0787d2fdf2e24e6fcf;hpb=c2ead8ac02672ab9af997272e211b0f0992288a1;p=sdc.git diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/ServiceCsarInfo.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/ServiceCsarInfo.java index 8dfe106713..7837588178 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/ServiceCsarInfo.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/ServiceCsarInfo.java @@ -35,6 +35,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.openecomp.sdc.be.components.impl.ImportUtils; @@ -44,11 +45,14 @@ import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum; import org.openecomp.sdc.be.model.NodeTypeDefinition; import org.openecomp.sdc.be.model.NodeTypeInfo; import org.openecomp.sdc.be.model.NodeTypeMetadata; +import org.openecomp.sdc.be.model.NullNodeTypeMetadata; import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.be.model.category.CategoryDefinition; import org.openecomp.sdc.be.model.category.SubCategoryDefinition; +import org.openecomp.sdc.be.model.operations.impl.ModelOperation; import org.openecomp.sdc.be.utils.TypeUtils; import org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum; +import org.openecomp.sdc.common.api.Constants; import org.openecomp.sdc.common.log.wrappers.Logger; import org.yaml.snakeyaml.Yaml; @@ -60,11 +64,15 @@ public class ServiceCsarInfo extends CsarInfo { private static final Logger log = Logger.getLogger(ServiceCsarInfo.class); private final Map> mainTemplateImports; private List nodeTypeDefinitions; + private final String model; + private final ModelOperation modelOperation; - public ServiceCsarInfo(final User modifier, final String csarUUID, final Map csar, final String vfResourceName, - final String mainTemplateName, final String mainTemplateContent, final boolean isUpdate) { + public ServiceCsarInfo(final User modifier, final String csarUUID, final Map csar, + final String vfResourceName, final String model, + final String mainTemplateName, final String mainTemplateContent, final boolean isUpdate, final ModelOperation modelOperation) { super(modifier, csarUUID, csar, vfResourceName, mainTemplateName, mainTemplateContent, isUpdate); - + this.model = model; + this.modelOperation = modelOperation; final Path mainTemplateDir = Paths.get(getMainTemplateName().substring(0, getMainTemplateName().lastIndexOf('/') + 1)); final Collection filesHandled = new HashSet<>(); filesHandled.add(Paths.get(mainTemplateName)); @@ -78,17 +86,18 @@ public class ServiceCsarInfo extends CsarInfo { final List importFilePaths = getTemplateImportFilePaths(mappedToscaMainTemplate, fileParentDir); importFilePaths.stream().filter(path -> !filesHandled.contains(path)).forEach( - importFilePath -> { - byte[] importFile = csar.get(importFilePath.toString()); - if (importFile != null) { - filesHandled.add(importFilePath); - Map mappedImportFile = new Yaml().load(new String(csar.get(importFilePath.toString()))); - templateImports.put(importFilePath.toString(), mappedImportFile); - templateImports.putAll(getTemplateImports(csar, mappedImportFile, importFilePath.getParent(), filesHandled)); - } else { - log.info("Import {} cannot be found in CSAR", importFilePath.toString()); - } - }); + importFilePath -> { + final String importFilePathString = importFilePath.toString(); + final byte[] importFile = csar.get(importFilePathString); + if (importFile != null) { + filesHandled.add(importFilePath); + final Map mappedImportFile = new Yaml().load(new String(importFile)); + templateImports.put(importFilePathString, mappedImportFile); + templateImports.putAll(getTemplateImports(csar, mappedImportFile, importFilePath.getParent(), filesHandled)); + } else { + log.warn("Import {} cannot be found in CSAR", importFilePathString); + } + }); return templateImports; } @@ -103,7 +112,12 @@ public class ServiceCsarInfo extends CsarInfo { if (CollectionUtils.isNotEmpty(importsList)) { if (importsList.get(0) instanceof String) { List importPaths = new ArrayList<>(); - importsList.stream().forEach(importPath -> importPaths.add(Paths.get((String) importPath))); + importsList.forEach( + importPath -> { + final Path path = fileParentDir == null ? + Paths.get((String) importPath) : fileParentDir.resolve(Paths.get((String) importPath)).normalize(); + importPaths.add(path); + }); return importPaths; } else if (importsList.get(0) instanceof Map) { return getTemplateImportFilePathsMultiLineGrammar(importsList, fileParentDir); @@ -143,18 +157,41 @@ public class ServiceCsarInfo extends CsarInfo { @Override public Map getDataTypes() { - final Map definitions = new HashMap<>(); - mainTemplateImports.entrySet().stream() - .forEach(entry -> definitions.putAll(getTypesFromTemplate(entry.getValue(), TypeUtils.ToscaTagNamesEnum.DATA_TYPES))); - definitions.putAll(getTypesFromTemplate(getMappedToscaMainTemplate(), TypeUtils.ToscaTagNamesEnum.DATA_TYPES)); - return definitions; + return getTypes(ToscaTagNamesEnum.DATA_TYPES); + } + + @Override + public Map getGroupTypes() { + return getTypes(ToscaTagNamesEnum.GROUP_TYPES); + } + + @Override + public Map getCapabilityTypes() { + return getTypes(ToscaTagNamesEnum.CAPABILITY_TYPES); + } + + @Override + public Map getArtifactTypes() { + return getTypes(ToscaTagNamesEnum.ARTIFACT_TYPES); + } + + @Override + public Map getInterfaceTypes() { + return getTypes(ToscaTagNamesEnum.INTERFACE_TYPES); + } + + private Map getTypes(ToscaTagNamesEnum toscaTag) { + final Map types = new HashMap<>(); + mainTemplateImports.entrySet().forEach(entry -> types.putAll(getTypesFromTemplate(entry.getValue(), toscaTag))); + types.putAll(getTypesFromTemplate(getMappedToscaMainTemplate(), toscaTag)); + return types; } public List getNodeTypesUsed() { if (nodeTypeDefinitions == null) { nodeTypeDefinitions = new ArrayList<>(); final Set nodeTypesUsed = getNodeTypesUsedInToscaTemplate(getMappedToscaMainTemplate()); - nodeTypeDefinitions.addAll(getNodeTypeDefinitions(nodeTypesUsed)); + nodeTypeDefinitions.addAll(getNodeTypeDefinitions(nodeTypesUsed).values()); } nodeTypeDefinitions = sortNodeTypesByDependencyOrder(nodeTypeDefinitions); return nodeTypeDefinitions; @@ -169,10 +206,10 @@ public class ServiceCsarInfo extends CsarInfo { for (final String dependencyName : getDependencyTypes(nodeType, nodeTypes)) { final NodeTypeDefinition dependency = nodeTypeDefinitionsMap.get(dependencyName); final int indexOfDependency = sortedNodeTypeDefinitions.lastIndexOf(dependency); - highestDependencyIndex = indexOfDependency > highestDependencyIndex ? indexOfDependency : highestDependencyIndex; + highestDependencyIndex = Math.max(indexOfDependency, highestDependencyIndex); } sortedNodeTypeDefinitions.add(highestDependencyIndex + 1, nodeType); - nodeTypeDefinitionsMap.put(nodeType.getNodeTypeMetadata().getToscaName(), nodeType); + nodeTypeDefinitionsMap.put(nodeType.getMappedNodeType().getKey(), nodeType); }); return sortedNodeTypeDefinitions; } @@ -184,46 +221,64 @@ public class ServiceCsarInfo extends CsarInfo { if (derivedFromTypeEither.isLeft() && derivedFromTypeEither.left().value() != null) { final String derivedFrom = (String) derivedFromTypeEither.left().value(); dependencies.add(derivedFrom); - nodeTypes.stream().filter(derivedFromCandidate -> derivedFrom.contentEquals(derivedFromCandidate.getNodeTypeMetadata().getToscaName())) + nodeTypes.stream().filter(derivedFromCandidate -> derivedFrom.contentEquals(derivedFromCandidate.getMappedNodeType().getKey())) .forEach(derivedFromNodeType -> dependencies.addAll(getDependencyTypes(derivedFromNodeType, nodeTypes))); } return dependencies; } - private Set getNodeTypeDefinitions(final Set nodeTypesToGet) { - final Set nodeTypesToReturn = new HashSet<>(); - final Set foundNodeTypes = getTypes(nodeTypesToGet); - nodeTypesToReturn.addAll(foundNodeTypes); + private Map getNodeTypeDefinitions(final Set nodeTypesToGet) { + final Map foundNodeTypes = getTypes(nodeTypesToGet); + final Map nodeTypesToReturn = new HashMap<>(foundNodeTypes); final Set recursiveNodeTypesToGet = new HashSet<>(); - foundNodeTypes.stream().forEach(nodeTypeDef -> { + foundNodeTypes.values().forEach(nodeTypeDef -> { Either derivedFromTypeEither = findToscaElement((Map) nodeTypeDef.getMappedNodeType().getValue(), TypeUtils.ToscaTagNamesEnum.DERIVED_FROM, ToscaElementTypeEnum.STRING); if (derivedFromTypeEither.isLeft()) { - recursiveNodeTypesToGet.add((String)derivedFromTypeEither.left().value()); + recursiveNodeTypesToGet.add((String) derivedFromTypeEither.left().value()); } }); recursiveNodeTypesToGet.removeAll(nodeTypesToGet); if (CollectionUtils.isNotEmpty(recursiveNodeTypesToGet)) { - nodeTypesToReturn.addAll(getNodeTypeDefinitions(recursiveNodeTypesToGet)); + nodeTypesToReturn.putAll(getNodeTypeDefinitions(recursiveNodeTypesToGet)); } return nodeTypesToReturn; } + private Map getTypes(final Set nodeTypes) { + final Map nodeTypeDefinitionsMap = new HashMap<>(); + final Set lowerPrecedenceImports = new HashSet<>(); - private Set getTypes(final Set nodeTypes) { - Set nodeTypeDefinitionsLocal = new HashSet<>(); - mainTemplateImports.entrySet().forEach(entry -> { - final Map types = getTypesFromTemplate(entry.getValue(), TypeUtils.ToscaTagNamesEnum.NODE_TYPES, nodeTypes); - if (MapUtils.isNotEmpty(types)) { - types.entrySet().stream().forEach(typesEntry -> { - final NodeTypeMetadata metadata = - getMetaDataFromTemplate(entry.getValue(), typesEntry.getKey()); - nodeTypeDefinitionsLocal.add(new NodeTypeDefinition(typesEntry, metadata)); - }); - } - }); - return nodeTypeDefinitionsLocal; + if (model != null && !model.equals(Constants.DEFAULT_MODEL_NAME)) { + final Set modelImports = new HashSet<>(); + modelOperation.findAllModelImports(model, true).forEach(modelImport -> modelImports.add("Definitions/" + modelImport.getFullPath())); + + lowerPrecedenceImports.add("Definitions/" + ModelOperation.ADDITIONAL_TYPE_DEFINITIONS_PATH); + lowerPrecedenceImports.addAll(modelImports); + + mainTemplateImports.entrySet().stream().filter(entry -> modelImports.contains(entry.getKey())) + .forEach(template -> addTypesFromTemplate(nodeTypeDefinitionsMap, template.getValue(), nodeTypes)); + + mainTemplateImports.entrySet().stream().filter(entry -> entry.getKey().equals(ModelOperation.ADDITIONAL_TYPE_DEFINITIONS_PATH.toString())) + .forEach(template -> addTypesFromTemplate(nodeTypeDefinitionsMap, template.getValue(), nodeTypes)); + } + + mainTemplateImports.entrySet().stream().filter(entry -> !lowerPrecedenceImports.contains(entry.getKey())) + .forEach(template -> addTypesFromTemplate(nodeTypeDefinitionsMap, template.getValue(), nodeTypes)); + + return nodeTypeDefinitionsMap; + } + + private void addTypesFromTemplate(final Map nodeTypeDefinitionsMap, final Map mappedTemplate, + final Set nodeTypes) { + final Map types = getTypesFromTemplate(mappedTemplate, ToscaTagNamesEnum.NODE_TYPES, nodeTypes); + if (MapUtils.isNotEmpty(types)) { + types.entrySet().forEach(typesEntry -> { + final NodeTypeMetadata metadata = getMetaDataFromTemplate(mappedTemplate, typesEntry.getKey()); + nodeTypeDefinitionsMap.put(typesEntry.getKey(), new NodeTypeDefinition(typesEntry, metadata)); + }); + } } @SuppressWarnings("unchecked") @@ -241,17 +296,18 @@ public class ServiceCsarInfo extends CsarInfo { private NodeTypeMetadata getMetaDataFromTemplate(Map mappedResourceTemplate, String nodeTemplateType) { NodeTypeMetadata nodeTypeMetadata = new NodeTypeMetadata(); - Either, ImportUtils.ResultStatusEnum> metadataEither = ImportUtils.findFirstToscaMapElement(mappedResourceTemplate, TypeUtils.ToscaTagNamesEnum.METADATA); + Either, ImportUtils.ResultStatusEnum> metadataEither = ImportUtils.findFirstToscaMapElement(mappedResourceTemplate, + TypeUtils.ToscaTagNamesEnum.METADATA); if (metadataEither.isLeft() && metadataEither.left().value().get("type").equals(ResourceTypeEnum.VFC.getValue())) { Map metadata = metadataEither.left().value(); createMetadataFromTemplate(nodeTypeMetadata, metadata, nodeTemplateType); } else { - createDefaultMetadata(nodeTypeMetadata, nodeTemplateType); + nodeTypeMetadata = createDefaultMetadata(nodeTemplateType); } return nodeTypeMetadata; } - private void createMetadataFromTemplate(NodeTypeMetadata nodeTypeMetadata, Map metadata, String nodeTemplateType) { + private void createMetadataFromTemplate(NodeTypeMetadata nodeTypeMetadata, Map metadata, String nodeTemplateType) { nodeTypeMetadata.setToscaName(nodeTemplateType); nodeTypeMetadata.setContactId(getModifier().getUserId()); nodeTypeMetadata.setDescription((String) metadata.get("description")); @@ -274,40 +330,15 @@ public class ServiceCsarInfo extends CsarInfo { nodeTypeMetadata.setResourceVendorModelNumber((String) metadata.get("resourceVendorModelNumber")); nodeTypeMetadata.setResourceType((String) metadata.get("type")); nodeTypeMetadata.setVendorName((String) metadata.get("resourceVendor")); - nodeTypeMetadata.setVendorRelease((String) metadata.get("resourceVendorRelease")); - nodeTypeMetadata.setModel((String) metadata.get("model")); + nodeTypeMetadata.setVendorRelease(String.valueOf(metadata.get("resourceVendorRelease"))); + nodeTypeMetadata.setModel(model); nodeTypeMetadata.setNormative(false); } - private void createDefaultMetadata(NodeTypeMetadata nodeTypeMetadata, String nodeTemplateType) { + private NullNodeTypeMetadata createDefaultMetadata(String nodeTemplateType) { + NullNodeTypeMetadata nodeTypeMetadata = new NullNodeTypeMetadata(); nodeTypeMetadata.setToscaName(nodeTemplateType); - nodeTypeMetadata.setContactId(getModifier().getUserId()); - nodeTypeMetadata.setDescription("A vfc of type " + nodeTemplateType); - Either, ResultStatusEnum> mainMetadataEither = ImportUtils.findFirstToscaMapElement(getMappedToscaMainTemplate(), - ToscaTagNamesEnum.METADATA); - Map mainMetadata = mainMetadataEither.left().value(); - nodeTypeMetadata.setModel((String) mainMetadata.get("model")); - SubCategoryDefinition subCategory = new SubCategoryDefinition(); - subCategory.setName("Network Elements"); - CategoryDefinition category = new CategoryDefinition(); - category.setName("Generic"); - category.setNormalizedName("generic"); - category.setIcons(List.of(DEFAULT_ICON)); - category.setNormalizedName("generic"); - category.addSubCategory(subCategory); - List categories = new ArrayList<>(); - categories.add(category); - nodeTypeMetadata.setCategories(categories); - String[] nodeTemplateName = nodeTemplateType.split("\\."); - String name = nodeTemplateName[nodeTemplateName.length - 1]; - nodeTypeMetadata.setName(name); - List tags = new ArrayList<>(); - tags.add(name); - nodeTypeMetadata.setTags(tags); - nodeTypeMetadata.setIcon("defaulticon"); - nodeTypeMetadata.setVendorName((String) mainMetadata.get("name")); - nodeTypeMetadata.setVendorRelease("1"); - nodeTypeMetadata.setNormative(false); + nodeTypeMetadata.setModel(model); + return nodeTypeMetadata; } - }