2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
19 import static org.openecomp.sdc.translator.services.heattotosca.HeatToToscaLogConstants.LOG_NESTED_RESOURCE_PROPERTY_NOT_DEFINED;
21 import java.util.ArrayList;
22 import java.util.HashMap;
23 import java.util.List;
25 import java.util.Optional;
26 import java.util.function.Predicate;
28 import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
29 import org.onap.sdc.tosca.datatypes.model.NodeType;
30 import org.onap.sdc.tosca.datatypes.model.RequirementDefinition;
31 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
32 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
33 import org.openecomp.sdc.tosca.services.DataModelUtil;
34 import org.openecomp.sdc.tosca.services.ToscaConstants;
35 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
37 abstract class ResourceConnectionUsingRequirementHelper extends BaseResourceConnection<RequirementDefinition> {
38 ResourceConnectionUsingRequirementHelper(ResourceTranslationBase resourceTranslationBase,
39 TranslateTo translateTo, FileData nestedFileData,
40 NodeTemplate substitutionNodeTemplate,
42 super(resourceTranslationBase, translateTo, nestedFileData, substitutionNodeTemplate, nodeType);
46 String getMappedNodeTranslatedResourceId(ServiceTemplate nestedServiceTemplate,
48 RequirementDefinition> connectionPointEntry) {
49 List<String> substitutionMapping =
50 nestedServiceTemplate.getTopology_template().getSubstitution_mappings().getRequirements()
51 .get(connectionPointEntry.getKey());
52 return substitutionMapping.get(0);
56 Map.Entry<String, RequirementDefinition> getMappedConnectionPointEntry(
57 ServiceTemplate nestedServiceTemplate,
58 Map.Entry<String, RequirementDefinition> connectionPointEntry) {
59 List<String> substitutionMapping =
60 nestedServiceTemplate.getTopology_template().getSubstitution_mappings().getRequirements()
61 .get(connectionPointEntry.getKey());
62 String mappedNodeTranslatedId = substitutionMapping.get(0);
63 String mappedReqId = substitutionMapping.get(1);
64 NodeTemplate mappedNodeTemplate =
65 nestedServiceTemplate.getTopology_template().getNode_templates()
66 .get(mappedNodeTranslatedId);
67 NodeType substituteNodeType =
68 translateTo.getContext().getGlobalSubstitutionServiceTemplate().getNode_types()
69 .get(mappedNodeTemplate.getType());
70 Optional<RequirementDefinition> requirementDefinition =
71 DataModelUtil.getRequirementDefinition(substituteNodeType, mappedReqId);
72 return new Map.Entry<String, RequirementDefinition>() {
74 public String getKey() {
79 public RequirementDefinition getValue() {
80 return requirementDefinition.orElse(null);
84 public RequirementDefinition setValue(RequirementDefinition value) {
91 List<Map<String, RequirementDefinition>> getAllConnectionPoints() {
92 List<Map<String, RequirementDefinition>> exposedRequirementsList = new ArrayList<>();
93 List<Predicate<RequirementDefinition>> predicates = getPredicatesListForConnectionPoints();
94 List<Map<String, RequirementDefinition>> requirements = this.nodeType.getRequirements();
95 if (requirements == null) {
96 return exposedRequirementsList;
100 .forEach(x -> x.stream()
101 .filter(entry -> predicates
103 .anyMatch(p -> p.test(entry.getValue())))
105 Map<String, RequirementDefinition> exposedRequirementsMap = new HashMap<>();
106 exposedRequirementsMap.put(entry.getKey(), entry.getValue());
107 exposedRequirementsList.add(exposedRequirementsMap);
109 return exposedRequirementsList;
112 void addRequirementToConnectResource(
113 Map.Entry<String, RequirementDefinition> requirementDefinitionEntry, String paramName,
114 Object paramValue, List<String> supportedNetworkTypes) {
115 if (paramValue == null) {
116 logger.warn(LOG_NESTED_RESOURCE_PROPERTY_NOT_DEFINED, paramName, translateTo.getResourceId(),
117 requirementDefinitionEntry.getKey(), ToscaConstants.REQUIREMENT);
120 Optional<String> targetTranslatedNodeId =
121 getConnectionTranslatedNodeUsingGetResourceFunc(requirementDefinitionEntry, paramName,
122 paramValue, supportedNetworkTypes);
123 if (targetTranslatedNodeId.isPresent()) {
124 createRequirementAssignment(requirementDefinitionEntry, targetTranslatedNodeId.get(),
125 substitutionNodeTemplate);
127 targetTranslatedNodeId =
128 getConnectionTranslatedNodeUsingGetParamFunc(requirementDefinitionEntry, paramName,
129 supportedNetworkTypes);
130 targetTranslatedNodeId
131 .ifPresent(targetTranslatedId -> createRequirementAssignment(requirementDefinitionEntry,
132 targetTranslatedId, substitutionNodeTemplate));