re base code
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / services / heattotosca / impl / resourcetranslation / ResourceTranslationContrailV2VmInterfaceImpl.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.services.heattotosca.impl.resourcetranslation;
18
19 import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
20 import org.openecomp.sdc.heat.services.HeatConstants;
21 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
22 import org.openecomp.sdc.tosca.services.DataModelUtil;
23 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
24 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
25 import org.openecomp.sdc.translator.services.heattotosca.helper.ContrailV2VirtualMachineInterfaceHelper;
26 import org.openecomp.sdc.translator.services.heattotosca.mapping.TranslatorHeatToToscaPropertyConverter;
27
28 import java.util.List;
29 import java.util.Map;
30
31
32 public class ResourceTranslationContrailV2VmInterfaceImpl extends ResourceTranslationBase {
33     private final ContrailV2VirtualMachineInterfaceHelper contrailV2VirtualMachineInterfaceHelper =
34             new ContrailV2VirtualMachineInterfaceHelper();
35
36     @Override
37     protected boolean isEssentialRequirementsValid(TranslateTo translateTo) {
38         if (contrailV2VirtualMachineInterfaceHelper
39                 .isVlanSubInterfaceResource(translateTo.getResource())) {
40             return contrailV2VirtualMachineInterfaceHelper
41                     .isVlanSubInterfaceConnectedToPortIndirectly(translateTo);
42         }
43         return true;
44     }
45
46     @Override
47     protected void translate(TranslateTo translateTo) {
48         if (contrailV2VirtualMachineInterfaceHelper
49                 .isVlanSubInterfaceResource(translateTo.getResource())) {
50             translateVlanSubInterfaceResource(translateTo);
51         } else {
52             translateVirtualMachineInterfaceResource(translateTo);
53         }
54     }
55
56
57     private void translateVirtualMachineInterfaceResource(TranslateTo translateTo) {
58         NodeTemplate nodeTemplate = new NodeTemplate();
59         nodeTemplate.setType(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE);
60         nodeTemplate.setProperties(TranslatorHeatToToscaPropertyConverter
61                 .getToscaPropertiesSimpleConversion(translateTo.getServiceTemplate(),
62                         translateTo.getResourceId(), translateTo.getResource().getProperties(),
63                         nodeTemplate.getProperties(), translateTo.getHeatFileName(),
64                         translateTo.getHeatOrchestrationTemplate(), translateTo.getResource().getType(),
65                         nodeTemplate, translateTo.getContext()));
66         String toscaVmiRefsPropertyName =
67                 HeatToToscaUtil.getToscaPropertyName(translateTo, HeatConstants.VMI_REFS_PROPERTY_NAME);
68         nodeTemplate.getProperties().remove(toscaVmiRefsPropertyName);
69         handleVmiMacAddressesInProperties(translateTo, nodeTemplate);
70         contrailV2VirtualMachineInterfaceHelper.connectVmiToNetwork(this, translateTo, nodeTemplate);
71         DataModelUtil.addNodeTemplate(translateTo.getServiceTemplate(), translateTo.getTranslatedId(), nodeTemplate);
72     }
73
74     private void handleVmiMacAddressesInProperties(TranslateTo translateTo,
75                                                    NodeTemplate nodeTemplate) {
76         String toscaVmiMacAddressesName =
77                 HeatToToscaUtil.getToscaPropertyName(translateTo, HeatConstants.VMI_MAC_ADDRESSES);
78         String toscaVmiMacAddressesMacAddressesName = HeatToToscaUtil
79                         .getToscaPropertyName(translateTo, HeatConstants.VMI_MAC_ADDRESSES_MAC_ADDRESSES);
80         if (nodeTemplate.getProperties().containsKey(toscaVmiMacAddressesName)) {
81             Object macAddressesValue = nodeTemplate.getProperties().get(toscaVmiMacAddressesName);
82             if (macAddressesValue instanceof Map && ((Map<String, Object>) macAddressesValue).containsKey(
83                     toscaVmiMacAddressesMacAddressesName)) {
84                 updateMacAddressesMacAddressesInProperties(nodeTemplate, toscaVmiMacAddressesName,
85                         toscaVmiMacAddressesMacAddressesName, (Map<String, Object>) macAddressesValue);
86             }
87         }
88     }
89
90     private void updateMacAddressesMacAddressesInProperties(NodeTemplate nodeTemplate,
91                                                             String toscaVmiMacAddressesName,
92                                                             String toscaVmiMacAddressesMacAddressesName,
93                                                             Map<String, Object> macAddressesValue) {
94         Object macAddressesMacAddressesValue =
95                 macAddressesValue.get(toscaVmiMacAddressesMacAddressesName);
96         if (macAddressesMacAddressesValue instanceof List) {
97             nodeTemplate.getProperties().put(toscaVmiMacAddressesName, macAddressesMacAddressesValue);
98         } else {
99             nodeTemplate.getProperties().remove(toscaVmiMacAddressesName);
100         }
101     }
102
103     private void translateVlanSubInterfaceResource(TranslateTo translateTo) {
104         new ResourceTranslationContrailV2VlanSubInterfaceImpl().translate(translateTo);
105     }
106
107 }