X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=openecomp-be%2Flib%2Fopenecomp-sdc-translator-lib%2Fopenecomp-sdc-translator-core%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fsdc%2Ftranslator%2Fservices%2Fheattotosca%2FUnifiedCompositionService.java;fp=openecomp-be%2Flib%2Fopenecomp-sdc-translator-lib%2Fopenecomp-sdc-translator-core%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fsdc%2Ftranslator%2Fservices%2Fheattotosca%2FUnifiedCompositionService.java;h=f064fb6b601a05bf5710fa34e734dec27454f1aa;hb=56e56b8860cf6e7ad70dc65134e8fd87eaf01123;hp=ae48ccf15612f57b1437c24a1812d016db777ef6;hpb=6cc3acdc6d3140a8f702939568ab4c7cda06beaa;p=sdc.git diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/UnifiedCompositionService.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/UnifiedCompositionService.java index ae48ccf156..f064fb6b60 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/UnifiedCompositionService.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/UnifiedCompositionService.java @@ -16,6 +16,9 @@ package org.openecomp.sdc.translator.services.heattotosca; +import static org.openecomp.sdc.tosca.datatypes.ToscaFunctions.GET_INPUT; +import static org.openecomp.sdc.tosca.datatypes.ToscaNodeType.GROUP_TYPE_PREFIX; +import static org.openecomp.sdc.tosca.datatypes.ToscaNodeType.VFC_INSTANCE_GROUP; import static org.openecomp.sdc.tosca.services.DataModelUtil.getClonedObject; import static org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.UnifiedCompositionEntity.COMPUTE; import static org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.UnifiedCompositionEntity.PORT; @@ -23,8 +26,11 @@ import static org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.co import static org.openecomp.sdc.translator.services.heattotosca.Constants.ABSTRACT_NODE_TEMPLATE_ID_PREFIX; import static org.openecomp.sdc.translator.services.heattotosca.Constants.COMPUTE_IDENTICAL_VALUE_PROPERTY_PREFIX; import static org.openecomp.sdc.translator.services.heattotosca.Constants.COMPUTE_IDENTICAL_VALUE_PROPERTY_SUFFIX; +import static org.openecomp.sdc.translator.services.heattotosca.Constants.GROUP; import static org.openecomp.sdc.translator.services.heattotosca.Constants.PORT_IDENTICAL_VALUE_PROPERTY_PREFIX; import static org.openecomp.sdc.translator.services.heattotosca.Constants.SUB_INTERFACE_PROPERTY_VALUE_PREFIX; +import static org.openecomp.sdc.translator.services.heattotosca.Constants.SUB_INTERFACE_ROLE; +import static org.openecomp.sdc.translator.services.heattotosca.Constants.VFC_PARENT_PORT_ROLE; import static org.openecomp.sdc.translator.services.heattotosca.UnifiedCompositionUtil.getComputeTypeSuffix; import static org.openecomp.sdc.translator.services.heattotosca.UnifiedCompositionUtil.getConnectedComputeConsolidationData; import static org.openecomp.sdc.translator.services.heattotosca.UnifiedCompositionUtil.getNewComputeNodeTemplateId; @@ -34,6 +40,7 @@ import static org.openecomp.sdc.translator.services.heattotosca.UnifiedCompositi import static org.openecomp.sdc.translator.services.heattotosca.UnifiedCompositionUtil.getSubInterfaceTemplateConsolidationDataList; import static org.openecomp.sdc.translator.services.heattotosca.UnifiedCompositionUtil.getSubInterfaceTypeSuffix; +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import org.apache.commons.collections.map.HashedMap; import org.apache.commons.collections4.CollectionUtils; @@ -268,6 +275,92 @@ public class UnifiedCompositionService { } + public void createVfcInstanceGroup(String abstractNodeTemplateId, + ServiceTemplate serviceTemplate, + List unifiedCompositionDataList, + TranslationContext context) { + if (!TranslationContext.isVfcInstanceGroupingEnabled()) { + return; + } + for (UnifiedCompositionData unifiedCompositionData : unifiedCompositionDataList) { + List subInterfaceTemplateConsolidationDataList = + getSubInterfaceTemplateConsolidationDataList(unifiedCompositionData); + if (CollectionUtils.isNotEmpty(subInterfaceTemplateConsolidationDataList)) { + createVfcInstanceGroupPerSubInterface(abstractNodeTemplateId, serviceTemplate, + subInterfaceTemplateConsolidationDataList, context); + } + } + } + + private void createVfcInstanceGroupPerSubInterface(String abstractNodeTemplateId, + ServiceTemplate serviceTemplate, + List + subInterfaceList, + TranslationContext context) { + for (SubInterfaceTemplateConsolidationData subInterface : subInterfaceList) { + PortTemplateConsolidationData subInterfacePortTemplateConsolidationData = + getSubInterfacePortTemplateConsolidationData(serviceTemplate, subInterface, context); + String subInterfaceNetworkRole = subInterface.getNetworkRole(); + if (Objects.isNull(subInterfaceNetworkRole) + || Objects.isNull(subInterfacePortTemplateConsolidationData.getNetworkRole())) { + continue; + } + String vfcNetworkRoleGroupId = getVfcNetworkRoleGroupId(subInterfaceNetworkRole); + Map groups = DataModelUtil.getGroups(serviceTemplate); + if (!groups.containsKey(vfcNetworkRoleGroupId)) { + createNewVfcInstanceGroup(serviceTemplate, subInterfacePortTemplateConsolidationData, + subInterfaceNetworkRole, vfcNetworkRoleGroupId); + } + DataModelUtil.addGroupMember(serviceTemplate, vfcNetworkRoleGroupId, abstractNodeTemplateId); + } + } + + private void createNewVfcInstanceGroup(ServiceTemplate serviceTemplate, + PortTemplateConsolidationData portTemplate, + String subInterfaceNetworkRole, + String vfcNetworkRoleGroupId) { + Map properties = new HashMap<>(); + properties.put(SUB_INTERFACE_ROLE, subInterfaceNetworkRole); + properties.put(VFC_PARENT_PORT_ROLE, portTemplate.getNetworkRole()); + + updateVfcInstanceGroupExposedProperties(subInterfaceNetworkRole, + serviceTemplate, properties); + + GroupDefinition groupDefinition = new GroupDefinition(); + groupDefinition.setType(GROUP_TYPE_PREFIX + VFC_INSTANCE_GROUP); + groupDefinition.setProperties(properties); + + DataModelUtil.addGroupDefinitionToTopologyTemplate(serviceTemplate, + vfcNetworkRoleGroupId, groupDefinition); + } + + private void updateVfcInstanceGroupExposedProperties(String subInterfaceNetworkRole, + ServiceTemplate serviceTemplate, + Map properties) { + List exposedVfcInstanceGroupingProperties = + TranslationContext.getExposedVfcInstanceGroupingProperties(); + + if (CollectionUtils.isEmpty(exposedVfcInstanceGroupingProperties)) { + return; + } + + for (String propertyName : exposedVfcInstanceGroupingProperties) { + Map getInputMap = new HashMap<>(); + String vfcGroupPropertyInputName = subInterfaceNetworkRole + "_" + propertyName; + getInputMap.put(GET_INPUT.getDisplayName(), vfcGroupPropertyInputName); + properties.put(propertyName, getInputMap); + + addInputParameter(vfcGroupPropertyInputName, PropertyType.STRING.getDisplayName(), null, + serviceTemplate); + } + } + + private String getVfcNetworkRoleGroupId(String subInterfaceNetworkRole) { + StringBuilder sb = new StringBuilder(); + sb.append(subInterfaceNetworkRole).append("_").append(GROUP); + return sb.toString(); + } + /** * Update the connectivity from/to the "moved" nodes from the original service template to the new * substitution service template. @@ -2612,7 +2705,7 @@ public class UnifiedCompositionService { case SUB_INTERFACE: String subInterfaceType = getSubInterfaceTypeSuffix(nodeTemplate.getType()); if (Objects.isNull(portTemplateConsolidationData) - || isSubInterfaceNodeTemplateIdParameter(portTemplateConsolidationData, nodeTemplate)) { + || portTemplateConsolidationData.isSubInterfaceNodeTemplateIdParameter(nodeTemplate.getType())) { paramterId = UnifiedCompositionEntity.SUB_INTERFACE.getDisplayName().toLowerCase() + "_" + nodeTemplateId + "_" + propertyId; } else { @@ -2626,14 +2719,6 @@ public class UnifiedCompositionService { return paramterId; } - private boolean isSubInterfaceNodeTemplateIdParameter(PortTemplateConsolidationData portTemplateConsolidationData, - NodeTemplate nodeTemplate) { - List subInterfaceTemplateConsolidationDataList = - portTemplateConsolidationData.getSubInterfaceConsolidationData(nodeTemplate.getType()); - return (Objects.nonNull(subInterfaceTemplateConsolidationDataList) - && subInterfaceTemplateConsolidationDataList.size() > 1) ; - } - private void removeConnectivityOut(EntityConsolidationData entityConsolidationData, NodeTemplate nodeTemplate) { if (MapUtils.isEmpty(entityConsolidationData.getNodesConnectedOut())) { @@ -2966,7 +3051,9 @@ public class UnifiedCompositionService { getPortTemplateConsolidationDataList(unifiedCompositionData); for (PortTemplateConsolidationData portTemplateConsolidationData : portTemplateConsolidationDataList) { - subInterfaceTypes.addAll(portTemplateConsolidationData.getAllSubInterfaceNodeTypes()); + ListMultimap subInterfaceTypeToEntity = ArrayListMultimap.create(); + portTemplateConsolidationData.copyMappedInto(subInterfaceTypeToEntity); + subInterfaceTypes.addAll(subInterfaceTypeToEntity.keySet()); } if (subInterfaceTypes.stream().map(UnifiedCompositionUtil::getSubInterfaceTypeSuffix)