TOSCA Consolidation Data handling - Refactoring
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / datatypes / heattotosca / unifiedmodel / consolidation / SubInterfaceConsolidationDataHandler.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation;
18
19 import java.util.Objects;
20 import java.util.Optional;
21 import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
22 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
23 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
24 import org.openecomp.sdc.heat.datatypes.model.Resource;
25 import org.openecomp.sdc.tosca.services.ToscaUtil;
26 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
27 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
28 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
29
30 public class SubInterfaceConsolidationDataHandler implements ConsolidationDataHandler {
31
32     private final PortConsolidationData portConsolidationData;
33
34     SubInterfaceConsolidationDataHandler(PortConsolidationData portConsolidationData) {
35         this.portConsolidationData = portConsolidationData;
36     }
37
38     @Override
39     public void addNodesConnectedOut(TranslateTo translateTo, String nodeTemplateId, String requirementId,
40                                             RequirementAssignment requirementAssignment) {
41         ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
42         if (Objects.nonNull(
43                 serviceTemplate.getTopology_template().getNode_templates().get(translateTo.getTranslatedId()))) {
44             Optional<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationData =
45                     getSubInterfaceTemplateConsolidationData(translateTo, translateTo.getTranslatedId());
46
47             subInterfaceTemplateConsolidationData.ifPresent(
48                     consolidationData -> consolidationData.addNodesConnectedOut(nodeTemplateId,
49                             requirementId, requirementAssignment));
50
51         }
52     }
53
54     @Override
55     public void addNodesConnectedIn(TranslateTo translateTo, String sourceNodeTemplateId,
56                                            String dependentNodeTemplateId, String targetResourceId,
57                                            String requirementId, RequirementAssignment requirementAssignment) {
58         ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
59         TranslationContext translationContext = translateTo.getContext();
60         Resource targetResource = translateTo.getHeatOrchestrationTemplate().getResources().get(targetResourceId);
61         TranslateTo subInterfaceTo = new TranslateTo(translateTo.getHeatFileName(), serviceTemplate,
62                                                             translateTo.getHeatOrchestrationTemplate(), targetResource,
63                                                             targetResourceId, null, translationContext);
64         Optional<SubInterfaceTemplateConsolidationData> subInterfaceTemplateConsolidationData =
65                 getSubInterfaceTemplateConsolidationData(subInterfaceTo, targetResourceId);
66
67         subInterfaceTemplateConsolidationData.ifPresent(
68                 consolidationData -> consolidationData.addNodesConnectedIn(sourceNodeTemplateId,
69                         requirementId, requirementAssignment));
70
71     }
72
73     @Override
74     public void removeParamNameFromAttrFuncList(ServiceTemplate serviceTemplate,
75                                                        HeatOrchestrationTemplate heatOrchestrationTemplate,
76                                                        String paramName,
77                                                        String contrailSharedResourceId,
78                                                        String sharedTranslatedResourceId) {
79
80
81         throw new UnsupportedOperationException(
82                 "API removeParamNameFromAttrFuncList not supported for SubInterfaceConsolidationDataHandler");
83
84     }
85
86     private Optional<SubInterfaceTemplateConsolidationData> getSubInterfaceTemplateConsolidationData(
87             TranslateTo subInterfaceTo, String subInterfaceNodeTemplateId) {
88
89         Optional<String> parentPortNodeTemplateId =
90                 HeatToToscaUtil.getSubInterfaceParentPortNodeTemplateId(subInterfaceTo);
91         return parentPortNodeTemplateId.map(s -> getSubInterfaceTemplateConsolidationData(subInterfaceTo, s,
92                 subInterfaceNodeTemplateId));
93
94     }
95
96     private SubInterfaceTemplateConsolidationData getSubInterfaceTemplateConsolidationData(TranslateTo subInterfaceTo,
97             String parentPortNodeTemplateId, String subInterfaceNodeTemplateId) {
98
99         String serviceTemplateFileName = ToscaUtil.getServiceTemplateFileName(subInterfaceTo.getServiceTemplate());
100         FilePortConsolidationData filePortConsolidationData =
101                 portConsolidationData.getFilePortConsolidationData(serviceTemplateFileName);
102
103         if (filePortConsolidationData == null) {
104             filePortConsolidationData = new FilePortConsolidationData();
105             portConsolidationData.setFilePortConsolidationData(serviceTemplateFileName,
106                     filePortConsolidationData);
107         }
108
109         PortTemplateConsolidationData portTemplateConsolidationData =
110                 filePortConsolidationData.getPortTemplateConsolidationData(parentPortNodeTemplateId);
111         if (portTemplateConsolidationData == null) {
112             portTemplateConsolidationData = new PortTemplateConsolidationData();
113             portTemplateConsolidationData.setNodeTemplateId(parentPortNodeTemplateId);
114             filePortConsolidationData.setPortTemplateConsolidationData(parentPortNodeTemplateId,
115                     portTemplateConsolidationData);
116         }
117
118         return portTemplateConsolidationData.getSubInterfaceResourceTemplateConsolidationData(
119                 subInterfaceTo.getResource(), subInterfaceNodeTemplateId, parentPortNodeTemplateId);
120     }
121
122 }