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.core.model.types.ServiceTemplate;
33 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
34 import org.openecomp.sdc.tosca.services.DataModelUtil;
35 import org.openecomp.sdc.tosca.services.ToscaConstants;
36 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
38 abstract class ResourceConnectionUsingRequirementHelper extends BaseResourceConnection<RequirementDefinition> {
39 ResourceConnectionUsingRequirementHelper(ResourceTranslationBase resourceTranslationBase,
40 TranslateTo translateTo, FileData nestedFileData,
41 NodeTemplate substitutionNodeTemplate,
43 super(resourceTranslationBase, translateTo, nestedFileData, substitutionNodeTemplate, nodeType);
47 String getMappedNodeTranslatedResourceId(ServiceTemplate nestedServiceTemplate,
49 RequirementDefinition> connectionPointEntry) {
50 List<String> substitutionMapping =
51 nestedServiceTemplate.getTopology_template().getSubstitution_mappings().getRequirements()
52 .get(connectionPointEntry.getKey());
53 return substitutionMapping.get(0);
57 Map.Entry<String, RequirementDefinition> getMappedConnectionPointEntry(
58 ServiceTemplate nestedServiceTemplate,
59 Map.Entry<String, RequirementDefinition> connectionPointEntry) {
60 List<String> substitutionMapping =
61 nestedServiceTemplate.getTopology_template().getSubstitution_mappings().getRequirements()
62 .get(connectionPointEntry.getKey());
63 String mappedNodeTranslatedId = substitutionMapping.get(0);
64 String mappedReqId = substitutionMapping.get(1);
65 NodeTemplate mappedNodeTemplate =
66 nestedServiceTemplate.getTopology_template().getNode_templates()
67 .get(mappedNodeTranslatedId);
68 NodeType substituteNodeType =
69 translateTo.getContext().getGlobalSubstitutionServiceTemplate().getNode_types()
70 .get(mappedNodeTemplate.getType());
71 Optional<RequirementDefinition> requirementDefinition =
72 DataModelUtil.getRequirementDefinition(substituteNodeType, mappedReqId);
73 return new Map.Entry<String, RequirementDefinition>() {
75 public String getKey() {
80 public RequirementDefinition getValue() {
81 return requirementDefinition.orElse(null);
85 public RequirementDefinition setValue(RequirementDefinition value) {
92 List<Map<String, RequirementDefinition>> getAllConnectionPoints() {
93 List<Map<String, RequirementDefinition>> exposedRequirementsList = new ArrayList<>();
94 List<Predicate<RequirementDefinition>> predicates = getPredicatesListForConnectionPoints();
95 List<Map<String, RequirementDefinition>> requirements = this.nodeType.getRequirements();
96 if (requirements == null) {
97 return exposedRequirementsList;
101 .forEach(x -> x.stream()
102 .filter(entry -> predicates
104 .anyMatch(p -> p.test(entry.getValue())))
106 Map<String, RequirementDefinition> exposedRequirementsMap = new HashMap<>();
107 exposedRequirementsMap.put(entry.getKey(), entry.getValue());
108 exposedRequirementsList.add(exposedRequirementsMap);
110 return exposedRequirementsList;
113 void addRequirementToConnectResource(
114 Map.Entry<String, RequirementDefinition> requirementDefinitionEntry, String paramName,
115 Object paramValue, List<String> supportedNetworkTypes) {
116 if (paramValue == null) {
117 logger.warn(LOG_NESTED_RESOURCE_PROPERTY_NOT_DEFINED, paramName, translateTo.getResourceId(),
118 requirementDefinitionEntry.getKey(), ToscaConstants.REQUIREMENT);
121 Optional<String> targetTranslatedNodeId =
122 getConnectionTranslatedNodeUsingGetResourceFunc(requirementDefinitionEntry, paramName,
123 paramValue, supportedNetworkTypes);
124 if (targetTranslatedNodeId.isPresent()) {
125 createRequirementAssignment(requirementDefinitionEntry, targetTranslatedNodeId.get(),
126 substitutionNodeTemplate);
128 targetTranslatedNodeId =
129 getConnectionTranslatedNodeUsingGetParamFunc(requirementDefinitionEntry, paramName,
130 supportedNetworkTypes);
131 targetTranslatedNodeId
132 .ifPresent(targetTranslatedId -> createRequirementAssignment(requirementDefinitionEntry,
133 targetTranslatedId, substitutionNodeTemplate));