2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.translator.services.heattotosca.impl;
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;
45 import java.util.ArrayList;
46 import java.util.HashMap;
47 import java.util.List;
49 import java.util.Objects;
50 import java.util.Optional;
51 import java.util.function.Predicate;
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,
63 protected boolean isDesiredNodeTemplateType(NodeTemplate nodeTemplate) {
64 return nodeTemplate.getType().equals(ToscaNodeType.NEUTRON_PORT.getDisplayName());
68 protected List<Predicate<CapabilityDefinition>> getPredicatesListForConnectionPoints() {
69 ArrayList<Predicate<CapabilityDefinition>> predicates = new ArrayList<>();
70 predicates.add(cap -> cap.getType().equals(ToscaCapabilityType.ATTACHMENT.getDisplayName()));
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());
90 return Optional.of(paramsList);
92 return Optional.empty();
96 protected String getDesiredResourceType() {
97 return HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource();
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;
108 capabilities.entrySet()
110 .filter(entry -> predicates
112 .anyMatch(p -> p.test(entry.getValue())))
114 Map<String, CapabilityDefinition> exposedRequirementsMap = new HashMap<>();
115 exposedRequirementsMap.put(entry.getKey(), entry.getValue());
116 exposedRequirementsList.add(exposedRequirementsMap);
119 return exposedRequirementsList;
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()) {
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);
152 securityGroupResource.getType() + "connection to " + securityGroupResource.getType()
153 + " is not supported/invalid, therefore this connection "
154 + "will be ignored in the TOSCA translation");
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(),
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);
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>() {
186 public String getKey() {
187 return ToscaConstants.PORT_REQUIREMENT_ID;
191 public RequirementDefinition getValue() {
196 public RequirementDefinition setValue(RequirementDefinition value) {