summaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/UnifiedCompositionService.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/UnifiedCompositionService.java')
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/UnifiedCompositionService.java107
1 files changed, 97 insertions, 10 deletions
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<UnifiedCompositionData> unifiedCompositionDataList,
+ TranslationContext context) {
+ if (!TranslationContext.isVfcInstanceGroupingEnabled()) {
+ return;
+ }
+ for (UnifiedCompositionData unifiedCompositionData : unifiedCompositionDataList) {
+ List<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationDataList =
+ getSubInterfaceTemplateConsolidationDataList(unifiedCompositionData);
+ if (CollectionUtils.isNotEmpty(subInterfaceTemplateConsolidationDataList)) {
+ createVfcInstanceGroupPerSubInterface(abstractNodeTemplateId, serviceTemplate,
+ subInterfaceTemplateConsolidationDataList, context);
+ }
+ }
+ }
+
+ private void createVfcInstanceGroupPerSubInterface(String abstractNodeTemplateId,
+ ServiceTemplate serviceTemplate,
+ List<SubInterfaceTemplateConsolidationData>
+ 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<String, GroupDefinition> 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<String, Object> 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<String, Object> properties) {
+ List<String> exposedVfcInstanceGroupingProperties =
+ TranslationContext.getExposedVfcInstanceGroupingProperties();
+
+ if (CollectionUtils.isEmpty(exposedVfcInstanceGroupingProperties)) {
+ return;
+ }
+
+ for (String propertyName : exposedVfcInstanceGroupingProperties) {
+ Map<String, Object> 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<SubInterfaceTemplateConsolidationData> 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<String, SubInterfaceTemplateConsolidationData> subInterfaceTypeToEntity = ArrayListMultimap.create();
+ portTemplateConsolidationData.copyMappedInto(subInterfaceTypeToEntity);
+ subInterfaceTypes.addAll(subInterfaceTypeToEntity.keySet());
}
if (subInterfaceTypes.stream().map(UnifiedCompositionUtil::getSubInterfaceTypeSuffix)