[sdc] docker file fix for cassandra
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / main / java / org / openecomp / sdc / translator / services / heattotosca / impl / SecurityRulesToPortResourceConnection.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.translator.services.heattotosca.impl;
22
23
24 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
25 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
26 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
27 import org.openecomp.sdc.heat.datatypes.model.Resource;
28 import org.openecomp.sdc.tosca.datatypes.ToscaCapabilityType;
29 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
30 import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType;
31 import org.openecomp.sdc.tosca.datatypes.model.CapabilityDefinition;
32 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
33 import org.openecomp.sdc.tosca.datatypes.model.NodeType;
34 import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
35 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
36 import org.openecomp.sdc.tosca.services.DataModelUtil;
37 import org.openecomp.sdc.tosca.services.ToscaConstants;
38 import org.openecomp.sdc.translator.datatypes.heattotosca.AttachedResourceId;
39 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
40 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslatedHeatResource;
41 import org.openecomp.sdc.translator.services.heattotosca.Constants;
42 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
43 import org.openecomp.sdc.translator.services.heattotosca.ResourceTranslationFactory;
44
45 import java.util.ArrayList;
46 import java.util.HashMap;
47 import java.util.List;
48 import java.util.Map;
49 import java.util.Objects;
50 import java.util.Optional;
51 import java.util.function.Predicate;
52
53
54 class SecurityRulesToPortResourceConnection extends BaseResourceConnection<CapabilityDefinition> {
55   SecurityRulesToPortResourceConnection(ResourceTranslationNestedImpl resourceTranslationNested,
56                                         TranslateTo translateTo, FileData nestedFileData,
57                                         NodeTemplate substitutionNodeTemplate, NodeType nodeType) {
58     super(resourceTranslationNested, translateTo, nestedFileData, substitutionNodeTemplate,
59         nodeType);
60   }
61
62   @Override
63   protected boolean isDesiredNodeTemplateType(NodeTemplate nodeTemplate) {
64     return nodeTemplate.getType().equals(ToscaNodeType.NEUTRON_PORT.getDisplayName());
65   }
66
67   @Override
68   protected List<Predicate<CapabilityDefinition>> getPredicatesListForConnectionPoints() {
69     ArrayList<Predicate<CapabilityDefinition>> predicates = new ArrayList<>();
70     predicates.add(cap -> cap.getType().equals(ToscaCapabilityType.ATTACHMENT.getDisplayName()));
71     return predicates;
72   }
73
74   @Override
75   protected Optional<List<String>> getConnectorParamName(
76           String heatResourceId,Resource heatResource,
77           HeatOrchestrationTemplate nestedHeatOrchestrationTemplate) {
78     Object securityGroups =
79         heatResource.getProperties().get(Constants.SECURITY_GROUPS_PROPERTY_NAME);
80     List<String> paramsList = new ArrayList<>();
81     if (securityGroups instanceof List) {
82       ((List) securityGroups).forEach(group -> {
83         Optional<AttachedResourceId> attachedResourceId = HeatToToscaUtil
84             .extractAttachedResourceId(nestedFileData.getFile(), nestedHeatOrchestrationTemplate,
85                 translateTo.getContext(), group);
86         if (attachedResourceId.isPresent()) {
87           paramsList.add((String) attachedResourceId.get().getEntityId());
88         }
89       });
90       return Optional.of(paramsList);
91     }
92     return Optional.empty();
93   }
94
95   @Override
96   protected String getDesiredResourceType() {
97     return HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource();
98   }
99
100   @Override
101   protected List<Map<String, CapabilityDefinition>> getAllConnectionPoints() {
102     List<Map<String, CapabilityDefinition>> exposedRequirementsList = new ArrayList<>();
103     List<Predicate<CapabilityDefinition>> predicates = getPredicatesListForConnectionPoints();
104     Map<String, CapabilityDefinition> capabilities = this.nodeType.getCapabilities();
105     if (capabilities == null) {
106       return exposedRequirementsList;
107     }
108     capabilities.entrySet()
109         .stream()
110         .filter(entry -> predicates
111             .stream()
112             .anyMatch(p -> p.test(entry.getValue())))
113         .forEach(entry -> {
114           Map<String, CapabilityDefinition> exposedRequirementsMap = new HashMap<>();
115           exposedRequirementsMap.put(entry.getKey(), entry.getValue());
116           exposedRequirementsList.add(exposedRequirementsMap);
117         });
118
119     return exposedRequirementsList;
120   }
121
122   @Override
123   void addRequirementToConnectResources(Map.Entry<String, CapabilityDefinition> entry,
124                                         List<String> paramNames) {
125     paramNames.forEach(p -> {
126       Optional<AttachedResourceId> attachedResourceId =
127           HeatToToscaUtil.extractAttachedResourceId(translateTo, p);
128       String securityRulesNodeId;
129       if (!attachedResourceId.isPresent()) {
130         return;
131       }
132       Map.Entry<String, RequirementDefinition> requirementDefinition =
133           createRequirementDefinition(entry.getKey());
134       AttachedResourceId securityGroupAttachedId = attachedResourceId.get();
135       if (securityGroupAttachedId.isGetResource()) {
136         String securityGroupResourceId = (String) attachedResourceId.get().getEntityId();
137         Resource securityGroupResource = HeatToToscaUtil
138             .getResource(translateTo.getHeatOrchestrationTemplate(), securityGroupResourceId,
139                 translateTo.getHeatFileName());
140         Optional<String> translatedSecurityRuleId =
141             ResourceTranslationFactory.getInstance(securityGroupResource)
142                 .translateResource(translateTo.getHeatFileName(), translateTo.getServiceTemplate(),
143                     translateTo.getHeatOrchestrationTemplate(), securityGroupResource,
144                     securityGroupResourceId, translateTo.getContext());
145         if (translatedSecurityRuleId.isPresent()) {
146           NodeTemplate securityRuleNodeTemplate = DataModelUtil
147               .getNodeTemplate(translateTo.getServiceTemplate(), translatedSecurityRuleId.get());
148           createRequirementAssignment(requirementDefinition, translateTo.getTranslatedId(),
149               securityRuleNodeTemplate);
150         } else {
151           logger.warn(
152               securityGroupResource.getType() + "connection to " + securityGroupResource.getType()
153                   + " is not supported/invalid, therefore this connection "
154                   +   "will be ignored in the TOSCA translation");
155         }
156       } else if (securityGroupAttachedId.isGetParam()) {
157         TranslatedHeatResource shareResource =
158             translateTo.getContext().getHeatSharedResourcesByParam()
159                 .get(securityGroupAttachedId.getEntityId());
160         if (Objects.nonNull(shareResource)
161             && !HeatToToscaUtil.isHeatFileNested(translateTo, translateTo.getHeatFileName())) {
162           NodeTemplate sharedNodeTemplate = DataModelUtil
163               .getNodeTemplate(translateTo.getServiceTemplate(), shareResource.getTranslatedId());
164           createRequirementAssignment(requirementDefinition, translateTo.getTranslatedId(),
165               sharedNodeTemplate);
166         }
167       }
168     });
169   }
170
171   @Override
172   protected String getTranslatedResourceIdFromSubstitutionMapping(
173       ServiceTemplate nestedServiceTemplate, Map.Entry<String, CapabilityDefinition> entry) {
174     List<String> substitutionMapping =
175         nestedServiceTemplate.getTopology_template().getSubstitution_mappings().getCapabilities()
176             .get(entry.getKey());
177     return substitutionMapping.get(0);
178   }
179
180   private Map.Entry<String, RequirementDefinition> createRequirementDefinition(String key) {
181     RequirementDefinition definition = new RequirementDefinition();
182     definition.setCapability(key);
183     definition.setRelationship(ToscaRelationshipType.ATTACHES_TO.getDisplayName());
184     return new Map.Entry<String, RequirementDefinition>() {
185       @Override
186       public String getKey() {
187         return ToscaConstants.PORT_REQUIREMENT_ID;
188       }
189
190       @Override
191       public RequirementDefinition getValue() {
192         return definition;
193       }
194
195       @Override
196       public RequirementDefinition setValue(RequirementDefinition value) {
197         return null;
198       }
199     };
200   }
201
202
203 }