[SDC] Onboarding 1710 rebase.
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / services / heattotosca / impl / unifiedcomposition / UnifiedCompositionSingleSubstitution.java
1 package org.openecomp.sdc.translator.services.heattotosca.impl.unifiedcomposition;
2
3 import org.apache.commons.collections4.CollectionUtils;
4 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
5 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
6 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.UnifiedCompositionData;
7 import org.openecomp.sdc.translator.services.heattotosca.UnifiedComposition;
8 import org.openecomp.sdc.translator.services.heattotosca.UnifiedCompositionService;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.Optional;
13
14
15 /**
16  * The type Unified composition single substitution.
17  */
18 public class UnifiedCompositionSingleSubstitution implements UnifiedComposition {
19
20   UnifiedCompositionService unifiedCompositionService = new UnifiedCompositionService();
21
22   // There is no consolidation in SingleSubstitution implemetation.
23   // In case of single substitution, if there is more than one entry in the
24   // unifiedComposotionDataList, they all should contain the same compute type but the
25   // consolidation between them was canceled.
26   // For different compute type, this implementation will be called more than once, each time
27   // per diff compute type, while sending one entry in the unifiedComposotionDataList.
28   @Override
29   public void createUnifiedComposition(ServiceTemplate serviceTemplate,
30                                        ServiceTemplate nestedServiceTemplate,
31                                        List<UnifiedCompositionData> unifiedCompositionDataList,
32                                        TranslationContext context) {
33     if (CollectionUtils.isEmpty(unifiedCompositionDataList)
34         || context.isUnifiedHandledServiceTemplate(serviceTemplate)) {
35       return;
36     }
37
38     unifiedCompositionService.handleComplexVfcType(serviceTemplate, context);
39
40     for (int i = 0; i < unifiedCompositionDataList.size(); i++) {
41       List<UnifiedCompositionData> singleSubstitutionUnifiedList = new ArrayList<>();
42       singleSubstitutionUnifiedList.add(unifiedCompositionDataList.get(i));
43
44       Integer index = unifiedCompositionDataList.size() > 1 ? i : null;
45
46       String substitutionNodeTypeId =
47           unifiedCompositionService.getSubstitutionNodeTypeId(serviceTemplate,
48               singleSubstitutionUnifiedList.get(0), null, context);
49
50       Optional<ServiceTemplate> substitutionServiceTemplate =
51           unifiedCompositionService.createUnifiedSubstitutionServiceTemplate(serviceTemplate,
52               singleSubstitutionUnifiedList, context, substitutionNodeTypeId, null);
53
54       if (!substitutionServiceTemplate.isPresent()) {
55         continue;
56       }
57
58
59       String abstractNodeTemplateId = unifiedCompositionService
60           .createAbstractSubstituteNodeTemplate(serviceTemplate, substitutionServiceTemplate.get(),
61               singleSubstitutionUnifiedList, substitutionNodeTypeId, context, null);
62
63       unifiedCompositionService
64           .updateCompositionConnectivity(serviceTemplate, singleSubstitutionUnifiedList, context);
65
66       unifiedCompositionService
67           .cleanUnifiedCompositionEntities(serviceTemplate, singleSubstitutionUnifiedList, context);
68
69     }
70
71     unifiedCompositionService
72         .cleanNodeTypes(serviceTemplate, unifiedCompositionDataList, context);
73   }
74 }