X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Faai%2Fbabel%2Fparser%2FArtifactGeneratorToscaParser.java;h=281ac63537627b68fe404f317bf1e5d3ae1603f1;hb=c1824169b0cfa25101c1efa8118d6b0b085edd15;hp=c2d34c930f4fcad6f250bdacb21cd45b0355b44a;hpb=834b05d3bf1e0d842a21a3cb31e8150ce0a8927b;p=aai%2Fbabel.git diff --git a/src/main/java/org/onap/aai/babel/parser/ArtifactGeneratorToscaParser.java b/src/main/java/org/onap/aai/babel/parser/ArtifactGeneratorToscaParser.java index c2d34c9..281ac63 100644 --- a/src/main/java/org/onap/aai/babel/parser/ArtifactGeneratorToscaParser.java +++ b/src/main/java/org/onap/aai/babel/parser/ArtifactGeneratorToscaParser.java @@ -28,10 +28,12 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; import org.onap.aai.babel.logging.LogHelper; @@ -45,9 +47,12 @@ import org.onap.aai.babel.xml.generator.model.WidgetType; import org.onap.aai.babel.xml.generator.types.ModelType; import org.onap.aai.cl.api.Logger; import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; +import org.onap.sdc.tosca.parser.utils.SdcToscaUtility; import org.onap.sdc.toscaparser.api.Group; import org.onap.sdc.toscaparser.api.NodeTemplate; import org.onap.sdc.toscaparser.api.Property; +import org.onap.sdc.toscaparser.api.SubstitutionMappings; import org.onap.sdc.toscaparser.api.elements.Metadata; /** @@ -135,7 +140,7 @@ public class ArtifactGeneratorToscaParser { throws XmlArtifactGenerationException { List resources = new ArrayList<>(); if (serviceNodeTemplate.getSubMappingToscaTemplate() != null) { - List serviceGroups = csarHelper.getGroupsOfOriginOfNodeTemplate(serviceNodeTemplate); + List serviceGroups = serviceNodeTemplate.getSubMappingToscaTemplate().getGroups(); for (Group group : serviceGroups) { if (WidgetConfigurationUtil.isSupportedInstanceGroup(group.getType())) { resources.addAll(processInstanceGroup(resourceModel, group.getMemberNodes(), @@ -199,25 +204,38 @@ public class ArtifactGeneratorToscaParser { * * @param resources * @param model - * @param serviceNode + * @param serviceVfNode + * a VF resource Node Template * @throws XmlArtifactGenerationException * if the configured widget mappings do not support the widget type of a VF Module */ - public void processVfModules(List resources, Model resourceModel, NodeTemplate serviceNode) + public void processVfModules(List resources, Model resourceModel, NodeTemplate serviceVfNode) throws XmlArtifactGenerationException { - // Get the customization UUID for each VF node and use it to get its Groups - String uuid = csarHelper.getNodeTemplateCustomizationUuid(serviceNode); - List serviceGroups = csarHelper.getVfModulesByVf(uuid); - // Process each VF Group - for (Group serviceGroup : serviceGroups) { + for (Group serviceGroup : getVfModuleGroups(serviceVfNode)) { Model groupModel = Model.getModelFor(serviceGroup.getType()); if (groupModel.hasWidgetType("VFMODULE")) { - processVfModule(resources, resourceModel, serviceGroup, serviceNode, (Resource) groupModel); + processVfModule(resources, resourceModel, serviceGroup, serviceVfNode, (Resource) groupModel); } } } + /** + * Implementation taken from the sdc-tosca parser (deprecated method). + * + * @param serviceVfNode + * a VF resource Node Template + * @return all service level VfModule groups with a name matching that of the supplied VF node template + */ + private List getVfModuleGroups(NodeTemplate serviceVfNode) { + String instanceName = SdcToscaUtility.normaliseComponentInstanceName(serviceVfNode.getName()); + + return ToscaParser.getServiceLevelGroups(csarHelper).stream() + .filter(group -> "org.openecomp.groups.VfModule".equals(group.getTypeDefinition().getType()) + && group.getName().startsWith(instanceName)) + .collect(Collectors.toList()); + } + /** * @param resourceModel * @param resourceNodeTemplates @@ -329,7 +347,12 @@ public class ArtifactGeneratorToscaParser { groupModel.populateModelIdentificationInformation( mergeProperties(groupDefinition.getMetadata().getAllProperties(), groupDefinition.getProperties())); - processVfModuleGroup(groupModel, csarHelper.getMembersOfVfModule(serviceNode, groupDefinition)); + + SubstitutionMappings substitutionMappings = serviceNode.getSubMappingToscaTemplate(); + if (substitutionMappings != null) { + processVfModuleGroup(groupModel, getVfModuleMembers(substitutionMappings, + groupDefinition.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID))); + } vfModel.addResource(groupModel); // Add group (VfModule) to the (VF) model // Check if we have already encountered the same VfModule across all the artifacts @@ -338,6 +361,29 @@ public class ArtifactGeneratorToscaParser { } } + /** + * @param substitutionMappings + * @param vfModuleInvariantUuid + * @return all serviceNode child Node Templates which are members of the first VF Module Group + */ + private List getVfModuleMembers(SubstitutionMappings substitutionMappings, + String vfModuleInvariantUuid) { + return Optional.ofNullable(substitutionMappings.getGroups()) // + .map(groups -> groups.stream() // + .filter(filterByVfModuleInvariantUuid(vfModuleInvariantUuid)) // + .findFirst().map(module -> Optional.ofNullable(module.getMembers()).orElse(new ArrayList<>())) + .orElse(new ArrayList<>())) + .map(members -> substitutionMappings.getNodeTemplates().stream() + .filter(nt -> members.contains(nt.getName())) // + .collect(Collectors.toList())) + .orElse(Collections.emptyList()); + } + + private Predicate filterByVfModuleInvariantUuid(String vfModuleInvariantUuid) { + return nt -> (nt.getMetadata() != null && vfModuleInvariantUuid + .equals(nt.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID))); + } + /** * @param groupModel * @param members