summaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-tosca-lib/src/main
diff options
context:
space:
mode:
authorshiria <shiri.amichai@amdocs.com>2018-06-04 11:07:29 +0300
committerAvi Gaffa <avi.gaffa@amdocs.com>2018-06-05 14:31:34 +0000
commit09c6320df7f768e42edeaedd7ba69e6fb13d433d (patch)
tree92883e0297c3d47ab039685ca91f2f47a1dbcd46 /openecomp-be/lib/openecomp-tosca-lib/src/main
parentd9cae980e80021dfad0bc9366d32d2cf996cfa90 (diff)
fix get flat node type
update node type interface update return value to object which include the type hierarchy Change-Id: I97623c7bbad0223a174370d13aabf4c3efe9c21e Issue-ID: SDC-1394 Signed-off-by: shiria <shiri.amichai@amdocs.com>
Diffstat (limited to 'openecomp-be/lib/openecomp-tosca-lib/src/main')
-rw-r--r--openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaFlatData.java57
-rw-r--r--openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/DataModelUtil.java532
-rw-r--r--openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaAnalyzerService.java85
-rw-r--r--openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaConstants.java3
-rw-r--r--openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/impl/ToscaAnalyzerServiceImpl.java1748
5 files changed, 1214 insertions, 1211 deletions
diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaFlatData.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaFlatData.java
new file mode 100644
index 0000000000..b898640df9
--- /dev/null
+++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaFlatData.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.openecomp.sdc.tosca.datatypes;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.collections4.CollectionUtils;
+
+public class ToscaFlatData {
+
+ private Object flatEntity;
+ private ToscaElementTypes elementType;
+ private List<String> inheritanceHierarchyType;
+
+ public ToscaElementTypes getElementType() {
+ return elementType;
+ }
+
+ public void setElementType(ToscaElementTypes elementType) {
+ this.elementType = elementType;
+ }
+
+ public Object getFlatEntity() {
+ return flatEntity;
+ }
+
+ public void setFlatEntity(Object flatEntity) {
+ this.flatEntity = flatEntity;
+ }
+
+ public List<String> getInheritanceHierarchyType() {
+ return inheritanceHierarchyType;
+ }
+
+ public void addInheritanceHierarchyType(String inheritedType) {
+ if (CollectionUtils.isEmpty(inheritanceHierarchyType)) {
+ inheritanceHierarchyType = new ArrayList<>();
+ }
+ this.inheritanceHierarchyType.add(inheritedType);
+ }
+}
diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/DataModelUtil.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/DataModelUtil.java
index a8629aa287..fc411bf009 100644
--- a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/DataModelUtil.java
+++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/DataModelUtil.java
@@ -45,7 +45,6 @@ import org.onap.sdc.tosca.datatypes.model.EntrySchema;
import org.onap.sdc.tosca.datatypes.model.GroupDefinition;
import org.onap.sdc.tosca.datatypes.model.Import;
import org.onap.sdc.tosca.datatypes.model.InterfaceDefinition;
-import org.onap.sdc.tosca.datatypes.model.InterfaceDefinitionTemplate;
import org.onap.sdc.tosca.datatypes.model.InterfaceDefinitionType;
import org.onap.sdc.tosca.datatypes.model.InterfaceType;
import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
@@ -101,11 +100,10 @@ public class DataModelUtil {
* @param substitutionMapping the substitution mapping
*/
public static void addSubstitutionMapping(ServiceTemplate serviceTemplate,
- SubstitutionMapping substitutionMapping) {
+ SubstitutionMapping substitutionMapping) {
if (serviceTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Substitution Mapping", SERVICE_TEMPLATE)
- .build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Substitution Mapping", SERVICE_TEMPLATE)
+ .build());
}
if (serviceTemplate.getTopology_template() == null) {
@@ -135,12 +133,11 @@ public class DataModelUtil {
* @param substitutionMappingRequirementList the substitution mapping requirement list
*/
public static void addSubstitutionMappingReq(ServiceTemplate serviceTemplate,
- String substitutionMappingRequirementId,
- List<String> substitutionMappingRequirementList) {
+ String substitutionMappingRequirementId,
+ List<String> substitutionMappingRequirementList) {
if (serviceTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Substitution Mapping Requirements",
- SERVICE_TEMPLATE).build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Substitution Mapping Requirements",
+ SERVICE_TEMPLATE).build());
}
if (serviceTemplate.getTopology_template() == null) {
@@ -149,14 +146,12 @@ public class DataModelUtil {
if (serviceTemplate.getTopology_template().getSubstitution_mappings() == null) {
serviceTemplate.getTopology_template().setSubstitution_mappings(new SubstitutionMapping());
}
- if (serviceTemplate.getTopology_template().getSubstitution_mappings().getRequirements()
- == null) {
- serviceTemplate.getTopology_template().getSubstitution_mappings()
- .setRequirements(new HashMap<>());
+ if (serviceTemplate.getTopology_template().getSubstitution_mappings().getRequirements() == null) {
+ serviceTemplate.getTopology_template().getSubstitution_mappings().setRequirements(new HashMap<>());
}
serviceTemplate.getTopology_template().getSubstitution_mappings().getRequirements()
- .put(substitutionMappingRequirementId, substitutionMappingRequirementList);
+ .put(substitutionMappingRequirementId, substitutionMappingRequirementList);
}
/**
@@ -167,12 +162,11 @@ public class DataModelUtil {
* @param substitutionMappingCapabilityList the substitution mapping capability list
*/
public static void addSubstitutionMappingCapability(ServiceTemplate serviceTemplate,
- String substitutionMappingCapabilityId,
- List<String> substitutionMappingCapabilityList) {
+ String substitutionMappingCapabilityId,
+ List<String> substitutionMappingCapabilityList) {
if (serviceTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Substitution Mapping Capabilities",
- SERVICE_TEMPLATE).build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Substitution Mapping Capabilities",
+ SERVICE_TEMPLATE).build());
}
if (serviceTemplate.getTopology_template() == null) {
@@ -181,14 +175,12 @@ public class DataModelUtil {
if (serviceTemplate.getTopology_template().getSubstitution_mappings() == null) {
serviceTemplate.getTopology_template().setSubstitution_mappings(new SubstitutionMapping());
}
- if (serviceTemplate.getTopology_template().getSubstitution_mappings().getCapabilities()
- == null) {
- serviceTemplate.getTopology_template().getSubstitution_mappings()
- .setCapabilities(new HashMap<>());
+ if (serviceTemplate.getTopology_template().getSubstitution_mappings().getCapabilities() == null) {
+ serviceTemplate.getTopology_template().getSubstitution_mappings().setCapabilities(new HashMap<>());
}
serviceTemplate.getTopology_template().getSubstitution_mappings().getCapabilities()
- .putIfAbsent(substitutionMappingCapabilityId, substitutionMappingCapabilityList);
+ .putIfAbsent(substitutionMappingCapabilityId, substitutionMappingCapabilityList);
}
/**
@@ -198,9 +190,8 @@ public class DataModelUtil {
* @return the service template node templates and empty map if not present
*/
public static Map<String, NodeTemplate> getNodeTemplates(ServiceTemplate serviceTemplate) {
- if (Objects.isNull(serviceTemplate)
- || Objects.isNull(serviceTemplate.getTopology_template())
- || MapUtils.isEmpty(serviceTemplate.getTopology_template().getNode_templates())) {
+ if (Objects.isNull(serviceTemplate) || Objects.isNull(serviceTemplate.getTopology_template())
+ || MapUtils.isEmpty(serviceTemplate.getTopology_template().getNode_templates())) {
return new HashMap<>();
}
@@ -214,9 +205,8 @@ public class DataModelUtil {
* @return the service template groups and empty map if not present
*/
public static Map<String, GroupDefinition> getGroups(ServiceTemplate serviceTemplate) {
- if (Objects.isNull(serviceTemplate)
- || Objects.isNull(serviceTemplate.getTopology_template())
- || MapUtils.isEmpty(serviceTemplate.getTopology_template().getGroups())) {
+ if (Objects.isNull(serviceTemplate) || Objects.isNull(serviceTemplate.getTopology_template())
+ || MapUtils.isEmpty(serviceTemplate.getTopology_template().getGroups())) {
return new HashMap<>();
}
@@ -231,10 +221,10 @@ public class DataModelUtil {
* @param nodeTemplate the node template
*/
public static void addNodeTemplate(ServiceTemplate serviceTemplate, String nodeTemplateId,
- NodeTemplate nodeTemplate) {
+ NodeTemplate nodeTemplate) {
if (serviceTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Node Template", SERVICE_TEMPLATE).build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Node Template", SERVICE_TEMPLATE)
+ .build());
}
TopologyTemplate topologyTemplate = serviceTemplate.getTopology_template();
if (Objects.isNull(topologyTemplate)) {
@@ -253,15 +243,14 @@ public class DataModelUtil {
* @param nodeType the node type
* @param capabilities the capability definitions
*/
- public static void addNodeTypeCapabilitiesDef(NodeType nodeType,
- Map<String, CapabilityDefinition> capabilities) {
+ public static void addNodeTypeCapabilitiesDef(NodeType nodeType, Map<String, CapabilityDefinition> capabilities) {
if (MapUtils.isEmpty(capabilities) || capabilities.entrySet().isEmpty()) {
return;
}
if (nodeType == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Capability Definition", NODE_TYPE).build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Capability Definition", NODE_TYPE)
+ .build());
}
if (MapUtils.isEmpty(nodeType.getCapabilities())) {
@@ -283,11 +272,10 @@ public class DataModelUtil {
* @param policyDefinition the policy definition
*/
public static void addPolicyDefinition(ServiceTemplate serviceTemplate, String policyId,
- PolicyDefinition policyDefinition) {
+ PolicyDefinition policyDefinition) {
if (serviceTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Policy Definition", SERVICE_TEMPLATE)
- .build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Policy Definition", SERVICE_TEMPLATE)
+ .build());
}
TopologyTemplate topologyTemplate = serviceTemplate.getTopology_template();
if (Objects.isNull(topologyTemplate)) {
@@ -307,11 +295,9 @@ public class DataModelUtil {
* @param nodeTypeId the node type id
* @param nodeType the node type
*/
- public static void addNodeType(ServiceTemplate serviceTemplate, String nodeTypeId,
- NodeType nodeType) {
+ public static void addNodeType(ServiceTemplate serviceTemplate, String nodeTypeId, NodeType nodeType) {
if (serviceTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder(NODE_TYPE, SERVICE_TEMPLATE).build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder(NODE_TYPE, SERVICE_TEMPLATE).build());
}
if (serviceTemplate.getNode_types() == null) {
serviceTemplate.setNode_types(new HashMap<>());
@@ -326,13 +312,11 @@ public class DataModelUtil {
* @param relationshipTemplateId the relationship template id
* @param relationshipTemplate the relationship template
*/
- public static void addRelationshipTemplate(ServiceTemplate serviceTemplate,
- String relationshipTemplateId,
- RelationshipTemplate relationshipTemplate) {
+ public static void addRelationshipTemplate(ServiceTemplate serviceTemplate, String relationshipTemplateId,
+ RelationshipTemplate relationshipTemplate) {
if (serviceTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Relationship Template", SERVICE_TEMPLATE)
- .build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Relationship Template",
+ SERVICE_TEMPLATE).build());
}
if (serviceTemplate.getTopology_template() == null) {
serviceTemplate.setTopology_template(new TopologyTemplate());
@@ -341,7 +325,7 @@ public class DataModelUtil {
serviceTemplate.getTopology_template().setRelationship_templates(new HashMap<>());
}
serviceTemplate.getTopology_template().getRelationship_templates()
- .put(relationshipTemplateId, relationshipTemplate);
+ .put(relationshipTemplateId, relationshipTemplate);
}
/**
@@ -352,11 +336,10 @@ public class DataModelUtil {
* @param requirementAssignment the requirement assignment
*/
public static void addRequirementAssignment(NodeTemplate nodeTemplate, String requirementId,
- RequirementAssignment requirementAssignment) {
+ RequirementAssignment requirementAssignment) {
if (nodeTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Requirement Assignment", "Node Template")
- .build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Requirement Assignment",
+ "Node Template").build());
}
if (requirementAssignment.getNode() == null) {
throw new CoreException(new InvalidRequirementAssignmentErrorBuilder(requirementId).build());
@@ -391,11 +374,9 @@ public class DataModelUtil {
* @param nodeTemplateId the node template id
* @return the node template
*/
- public static NodeTemplate getNodeTemplate(ServiceTemplate serviceTemplate,
- String nodeTemplateId) {
- if (serviceTemplate == null
- || serviceTemplate.getTopology_template() == null
- || serviceTemplate.getTopology_template().getNode_templates() == null) {
+ public static NodeTemplate getNodeTemplate(ServiceTemplate serviceTemplate, String nodeTemplateId) {
+ if (serviceTemplate == null || serviceTemplate.getTopology_template() == null
+ || serviceTemplate.getTopology_template().getNode_templates() == null) {
return null;
}
return serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId);
@@ -422,18 +403,12 @@ public class DataModelUtil {
* @param requirementDefinitionId the requirement definition id
* @return the requirement definition
*/
- public static Optional<RequirementDefinition> getRequirementDefinition(
- NodeType nodeType,
- String requirementDefinitionId) {
+ public static Optional<RequirementDefinition> getRequirementDefinition(NodeType nodeType,
+ String requirementDefinitionId) {
if (nodeType == null || nodeType.getRequirements() == null || requirementDefinitionId == null) {
return Optional.empty();
}
- for (Map<String, RequirementDefinition> reqMap : nodeType.getRequirements()) {
- if (reqMap.containsKey(requirementDefinitionId)) {
- return Optional.of(reqMap.get(requirementDefinitionId));
- }
- }
- return Optional.empty();
+ return getRequirementDefinition(nodeType.getRequirements(), requirementDefinitionId);
}
/**
@@ -442,16 +417,19 @@ public class DataModelUtil {
* @param requirementsDefinitionList requirement definition list
* @param requirementKey requirement key
*/
- public static Optional<RequirementDefinition> getRequirementDefinition(
- List<Map<String, RequirementDefinition>> requirementsDefinitionList,
- String requirementKey) {
+ public static Optional<RequirementDefinition> getRequirementDefinition(List<Map<String, RequirementDefinition>> requirementsDefinitionList,
+ String requirementKey) {
if (CollectionUtils.isEmpty(requirementsDefinitionList)) {
return Optional.empty();
}
+ ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
for (Map<String, RequirementDefinition> requirementMap : requirementsDefinitionList) {
if (requirementMap.containsKey(requirementKey)) {
- return Optional.of(requirementMap.get(requirementKey));
+ RequirementDefinition requirementDefinition = toscaExtensionYamlUtil.yamlToObject(
+ toscaExtensionYamlUtil.objectToYaml(requirementMap.get(requirementKey)),
+ RequirementDefinition.class);
+ return Optional.of(requirementDefinition);
}
}
return Optional.empty();
@@ -464,9 +442,8 @@ public class DataModelUtil {
* @param capabilityDefinitionId the capability definition id
* @return the capability definition
*/
- public static Optional<CapabilityDefinition> getCapabilityDefinition(
- NodeType nodeType,
- String capabilityDefinitionId) {
+ public static Optional<CapabilityDefinition> getCapabilityDefinition(NodeType nodeType,
+ String capabilityDefinitionId) {
if (nodeType == null || nodeType.getCapabilities() == null || capabilityDefinitionId == null) {
return Optional.empty();
}
@@ -480,12 +457,11 @@ public class DataModelUtil {
* @param groupName the group name
* @param group the group
*/
- public static void addGroupDefinitionToTopologyTemplate(ServiceTemplate serviceTemplate,
- String groupName, GroupDefinition group) {
+ public static void addGroupDefinitionToTopologyTemplate(ServiceTemplate serviceTemplate, String groupName,
+ GroupDefinition group) {
if (serviceTemplate == null) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Group Definition", SERVICE_TEMPLATE)
- .build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Group Definition", SERVICE_TEMPLATE)
+ .build());
}
TopologyTemplate topologyTemplate = serviceTemplate.getTopology_template();
@@ -511,13 +487,10 @@ public class DataModelUtil {
* @param groupName the group name
* @param groupMemberId the group member id
*/
- public static void addGroupMember(ServiceTemplate serviceTemplate,
- String groupName,
- String groupMemberId) {
+ public static void addGroupMember(ServiceTemplate serviceTemplate, String groupName, String groupMemberId) {
TopologyTemplate topologyTemplate = serviceTemplate.getTopology_template();
- if (Objects.isNull(topologyTemplate)
- || topologyTemplate.getGroups() == null
- || topologyTemplate.getGroups().get(groupName) == null) {
+ if (Objects.isNull(topologyTemplate) || topologyTemplate.getGroups() == null
+ || topologyTemplate.getGroups().get(groupName) == null) {
return;
}
@@ -542,11 +515,9 @@ public class DataModelUtil {
* @param defaultVal the default val
* @return the property definition
*/
- public static ParameterDefinition createParameterDefinition(String type, String description,
- boolean required,
- List<Constraint> constraints,
- EntrySchema entrySchema,
- Object defaultVal) {
+ public static ParameterDefinition createParameterDefinition(String type, String description, boolean required,
+ List<Constraint> constraints,
+ EntrySchema entrySchema, Object defaultVal) {
ParameterDefinition paramDef = new ParameterDefinition();
paramDef.setType(type);
paramDef.setDescription(description);
@@ -566,8 +537,8 @@ public class DataModelUtil {
* @param occurrences the occurrences
* @return the requirement definition
*/
- public static RequirementDefinition createRequirement(String capability, String node,
- String relationship, Object[] occurrences) {
+ public static RequirementDefinition createRequirement(String capability, String node, String relationship,
+ Object[] occurrences) {
RequirementDefinition requirementDefinition = new RequirementDefinition();
requirementDefinition.setCapability(capability);
requirementDefinition.setNode(node);
@@ -586,10 +557,8 @@ public class DataModelUtil {
* @param constraints the constraints
* @return the entry schema
*/
- public static EntrySchema createEntrySchema(String type, String description,
- List<Constraint> constraints) {
- if (Objects.isNull(type) && Objects.isNull(description)
- && CollectionUtils.isEmpty(constraints)) {
+ public static EntrySchema createEntrySchema(String type, String description, List<Constraint> constraints) {
+ if (Objects.isNull(type) && Objects.isNull(description) && CollectionUtils.isEmpty(constraints)) {
return null;
}
@@ -608,9 +577,8 @@ public class DataModelUtil {
* @param nestedPropertyName the nested property name
* @return the map
*/
- public static Map createGetInputPropertyValueFromListParameter(String inputPropertyListName,
- int indexInTheList,
- String... nestedPropertyName) {
+ public static Map createGetInputPropertyValueFromListParameter(String inputPropertyListName, int indexInTheList,
+ String... nestedPropertyName) {
List<Object> propertyList = new ArrayList<>();
propertyList.add(inputPropertyListName);
propertyList.add(indexInTheList);
@@ -628,8 +596,7 @@ public class DataModelUtil {
* @param propertyDefinition the property definition
* @return the parameter definition ext
*/
- public static ParameterDefinitionExt convertPropertyDefToParameterDef(
- PropertyDefinition propertyDefinition) {
+ public static ParameterDefinitionExt convertPropertyDefToParameterDef(PropertyDefinition propertyDefinition) {
if (propertyDefinition == null) {
return null;
}
@@ -641,8 +608,8 @@ public class DataModelUtil {
parameterDefinition.set_default(propertyDefinition.get_default());
parameterDefinition.setStatus(propertyDefinition.getStatus());
parameterDefinition.setConstraints(propertyDefinition.getConstraints());
- parameterDefinition.setEntry_schema(Objects.isNull(propertyDefinition.getEntry_schema()) ? null
- : propertyDefinition.getEntry_schema().clone());
+ parameterDefinition.setEntry_schema(Objects.isNull(propertyDefinition.getEntry_schema()) ? null :
+ propertyDefinition.getEntry_schema().clone());
parameterDefinition.setHidden(false);
parameterDefinition.setImmutable(false);
return parameterDefinition;
@@ -655,8 +622,8 @@ public class DataModelUtil {
* @param outputValue the output value
* @return the parameter definition ext
*/
- public static ParameterDefinitionExt convertAttributeDefToParameterDef(
- AttributeDefinition attributeDefinition, Map<String, List> outputValue) {
+ public static ParameterDefinitionExt convertAttributeDefToParameterDef(AttributeDefinition attributeDefinition,
+ Map<String, List> outputValue) {
if (attributeDefinition == null) {
return null;
}
@@ -668,7 +635,7 @@ public class DataModelUtil {
public static boolean isNodeTemplate(String entryId, ServiceTemplate serviceTemplate) {
return serviceTemplate.getTopology_template().getNode_templates() != null
- && serviceTemplate.getTopology_template().getNode_templates().get(entryId) != null;
+ && serviceTemplate.getTopology_template().getNode_templates().get(entryId) != null;
}
/**
@@ -679,12 +646,11 @@ public class DataModelUtil {
* @param parameterDefinition the parameter definition
*/
public static void addInputParameterToTopologyTemplate(ServiceTemplate serviceTemplate,
- String parameterDefinitionId,
- ParameterDefinition parameterDefinition) {
+ String parameterDefinitionId,
+ ParameterDefinition parameterDefinition) {
if (Objects.isNull(serviceTemplate)) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Topology Template Input Parameter",
- SERVICE_TEMPLATE).build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Topology Template Input Parameter",
+ SERVICE_TEMPLATE).build());
}
TopologyTemplate topologyTemplate = serviceTemplate.getTopology_template();
if (Objects.isNull(topologyTemplate)) {
@@ -705,12 +671,11 @@ public class DataModelUtil {
* @param parameterDefinition the parameter definition
*/
public static void addOutputParameterToTopologyTemplate(ServiceTemplate serviceTemplate,
- String parameterDefinitionId,
- ParameterDefinition parameterDefinition) {
+ String parameterDefinitionId,
+ ParameterDefinition parameterDefinition) {
if (Objects.isNull(serviceTemplate)) {
- throw new CoreException(
- new InvalidAddActionNullEntityErrorBuilder("Topology Template Output Parameter",
- SERVICE_TEMPLATE).build());
+ throw new CoreException(new InvalidAddActionNullEntityErrorBuilder("Topology Template Output Parameter",
+ SERVICE_TEMPLATE).build());
}
TopologyTemplate topologyTemplate = serviceTemplate.getTopology_template();
if (Objects.isNull(topologyTemplate)) {
@@ -730,7 +695,7 @@ public class DataModelUtil {
* @param requirementDef added requirement def
*/
public static void addRequirementToList(List<Map<String, RequirementDefinition>> requirementList,
- Map<String, RequirementDefinition> requirementDef) {
+ Map<String, RequirementDefinition> requirementDef) {
if (requirementDef == null) {
return;
}
@@ -748,8 +713,7 @@ public class DataModelUtil {
*
* @param nodeTemplate node template
*/
- public static Map<String, RequirementAssignment> getNodeTemplateRequirements(
- NodeTemplate nodeTemplate) {
+ public static Map<String, RequirementAssignment> getNodeTemplateRequirements(NodeTemplate nodeTemplate) {
if (Objects.isNull(nodeTemplate)) {
return null;
}
@@ -761,14 +725,11 @@ public class DataModelUtil {
}
YamlUtil yamlUtil = new YamlUtil();
for (Map<String, RequirementAssignment> requirementAssignmentMap : templateRequirements) {
- for (Map.Entry<String, RequirementAssignment> requirementEntry : requirementAssignmentMap
- .entrySet()) {
- RequirementAssignment requirementAssignment = (
- yamlUtil
- .yamlToObject(yamlUtil.objectToYaml(requirementEntry.getValue()),
- RequirementAssignment.class));
- nodeTemplateRequirementsAssignment
- .put(requirementEntry.getKey(), requirementAssignment);
+ for (Map.Entry<String, RequirementAssignment> requirementEntry : requirementAssignmentMap.entrySet()) {
+ RequirementAssignment requirementAssignment =
+ (yamlUtil.yamlToObject(yamlUtil.objectToYaml(requirementEntry.getValue()),
+ RequirementAssignment.class));
+ nodeTemplateRequirementsAssignment.put(requirementEntry.getKey(), requirementAssignment);
}
}
return nodeTemplateRequirementsAssignment;
@@ -780,24 +741,20 @@ public class DataModelUtil {
* @param nodeTemplate the node template
* @return the node template requirement list and null if the node has no requirements
*/
- public static List<Map<String, RequirementAssignment>> getNodeTemplateRequirementList(
- NodeTemplate nodeTemplate) {
+ public static List<Map<String, RequirementAssignment>> getNodeTemplateRequirementList(NodeTemplate nodeTemplate) {
ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
//Creating concrete objects
List<Map<String, RequirementAssignment>> requirements = nodeTemplate.getRequirements();
List<Map<String, RequirementAssignment>> concreteRequirementList = null;
if (requirements != null) {
concreteRequirementList = new ArrayList<>();
- ListIterator<Map<String, RequirementAssignment>> reqListIterator = requirements
- .listIterator();
+ ListIterator<Map<String, RequirementAssignment>> reqListIterator = requirements.listIterator();
while (reqListIterator.hasNext()) {
Map<String, RequirementAssignment> requirement = reqListIterator.next();
Map<String, RequirementAssignment> concreteRequirement = new HashMap<>();
for (Map.Entry<String, RequirementAssignment> reqEntry : requirement.entrySet()) {
- RequirementAssignment requirementAssignment = (
- toscaExtensionYamlUtil
- .yamlToObject(toscaExtensionYamlUtil.objectToYaml(reqEntry.getValue()),
- RequirementAssignment.class));
+ RequirementAssignment requirementAssignment = (toscaExtensionYamlUtil.yamlToObject(
+ toscaExtensionYamlUtil.objectToYaml(reqEntry.getValue()), RequirementAssignment.class));
concreteRequirement.put(reqEntry.getKey(), requirementAssignment);
concreteRequirementList.add(concreteRequirement);
reqListIterator.remove();
@@ -816,9 +773,8 @@ public class DataModelUtil {
* @param requirementsAssignmentList requirement definition list
* @param requirementKey requirement key
*/
- public static Optional<List<RequirementAssignment>> getRequirementAssignment(
- List<Map<String, RequirementAssignment>> requirementsAssignmentList,
- String requirementKey) {
+ public static Optional<List<RequirementAssignment>> getRequirementAssignment(List<Map<String, RequirementAssignment>> requirementsAssignmentList,
+ String requirementKey) {
if (CollectionUtils.isEmpty(requirementsAssignmentList)) {
return Optional.empty();
}
@@ -827,10 +783,9 @@ public class DataModelUtil {
for (Map<String, RequirementAssignment> requirementMap : requirementsAssignmentList) {
if (requirementMap.containsKey(requirementKey)) {
YamlUtil yamlUtil = new YamlUtil();
- RequirementAssignment requirementAssignment = (
- yamlUtil
- .yamlToObject(yamlUtil.objectToYaml(requirementMap.get(requirementKey)),
- RequirementAssignment.class));
+ RequirementAssignment requirementAssignment =
+ (yamlUtil.yamlToObject(yamlUtil.objectToYaml(requirementMap.get(requirementKey)),
+ RequirementAssignment.class));
matchRequirementAssignmentList.add(requirementAssignment);
}
}
@@ -846,9 +801,8 @@ public class DataModelUtil {
* @param requirementsDefinitionList requirement definition list
* @param requirementKey requirement key
*/
- public static void removeRequirementsDefinition(
- List<Map<String, RequirementDefinition>> requirementsDefinitionList,
- String requirementKey) {
+ public static void removeRequirementsDefinition(List<Map<String, RequirementDefinition>> requirementsDefinitionList,
+ String requirementKey) {
if (requirementsDefinitionList == null) {
return;
}
@@ -871,9 +825,8 @@ public class DataModelUtil {
* @param requirementsAssignmentList requirement Assignment list
* @param requirementKey requirement key
*/
- public static void removeRequirementsAssignment(
- List<Map<String, RequirementAssignment>> requirementsAssignmentList,
- String requirementKey) {
+ public static void removeRequirementsAssignment(List<Map<String, RequirementAssignment>> requirementsAssignmentList,
+ String requirementKey) {
if (requirementsAssignmentList == null) {
return;
}
@@ -898,13 +851,10 @@ public class DataModelUtil {
* @param requirementKey the requirement key
* @param requirementAssignmentToBeDeleted the requirement assignment to be deleted
*/
- public static void removeRequirementAssignment(
- NodeTemplate nodeTemplate,
- String requirementKey,
- RequirementAssignment requirementAssignmentToBeDeleted) {
+ public static void removeRequirementAssignment(NodeTemplate nodeTemplate, String requirementKey,
+ RequirementAssignment requirementAssignmentToBeDeleted) {
ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
- List<Map<String, RequirementAssignment>> nodeTemplateRequirements = nodeTemplate
- .getRequirements();
+ List<Map<String, RequirementAssignment>> nodeTemplateRequirements = nodeTemplate.getRequirements();
if (nodeTemplateRequirements == null) {
return;
}
@@ -915,10 +865,12 @@ public class DataModelUtil {
RequirementAssignment requirementAssignment = reqMap.get(requirementKey);
if (requirementAssignment != null) {
boolean isDesiredRequirementAssignment = toscaAnalyzerService
- .isDesiredRequirementAssignment(requirementAssignment,
- requirementAssignmentToBeDeleted.getCapability(),
- requirementAssignmentToBeDeleted.getNode(),
- requirementAssignmentToBeDeleted.getRelationship());
+ .isDesiredRequirementAssignment(requirementAssignment,
+ requirementAssignmentToBeDeleted
+ .getCapability(),
+ requirementAssignmentToBeDeleted.getNode(),
+ requirementAssignmentToBeDeleted
+ .getRelationship());
if (isDesiredRequirementAssignment) {
iter.remove();
}
@@ -950,8 +902,7 @@ public class DataModelUtil {
* @param importId namespace
* @return true if exist, false if not exist
*/
- public static boolean isImportAddedToServiceTemplate(List<Map<String, Import>> imports,
- String importId) {
+ public static boolean isImportAddedToServiceTemplate(List<Map<String, Import>> imports, String importId) {
for (Map<String, Import> anImport : imports) {
if (anImport.containsKey(importId)) {
return true;
@@ -967,11 +918,9 @@ public class DataModelUtil {
* @param outputParameterId output parameter id
* @return ParameterDefinition - output parameter
*/
- public static ParameterDefinition getOuputParameter(ServiceTemplate serviceTemplate,
- String outputParameterId) {
- if (serviceTemplate == null
- || serviceTemplate.getTopology_template() == null
- || serviceTemplate.getTopology_template().getOutputs() == null) {
+ public static ParameterDefinition getOuputParameter(ServiceTemplate serviceTemplate, String outputParameterId) {
+ if (serviceTemplate == null || serviceTemplate.getTopology_template() == null
+ || serviceTemplate.getTopology_template().getOutputs() == null) {
return null;
}
return serviceTemplate.getTopology_template().getOutputs().get(outputParameterId);
@@ -983,11 +932,9 @@ public class DataModelUtil {
* @param serviceTemplate the service template
* @return the input parameters
*/
- public static Map<String, ParameterDefinition> getInputParameters(ServiceTemplate
- serviceTemplate) {
- if (serviceTemplate == null
- || serviceTemplate.getTopology_template() == null
- || serviceTemplate.getTopology_template().getInputs() == null) {
+ public static Map<String, ParameterDefinition> getInputParameters(ServiceTemplate serviceTemplate) {
+ if (serviceTemplate == null || serviceTemplate.getTopology_template() == null
+ || serviceTemplate.getTopology_template().getInputs() == null) {
return null;
}
return serviceTemplate.getTopology_template().getInputs();
@@ -999,11 +946,9 @@ public class DataModelUtil {
* @param serviceTemplate the service template
* @return the relationship template
*/
- public static Map<String, RelationshipTemplate> getRelationshipTemplates(ServiceTemplate
- serviceTemplate) {
- if (serviceTemplate == null
- || serviceTemplate.getTopology_template() == null
- || serviceTemplate.getTopology_template().getRelationship_templates() == null) {
+ public static Map<String, RelationshipTemplate> getRelationshipTemplates(ServiceTemplate serviceTemplate) {
+ if (serviceTemplate == null || serviceTemplate.getTopology_template() == null
+ || serviceTemplate.getTopology_template().getRelationship_templates() == null) {
return null;
}
return serviceTemplate.getTopology_template().getRelationship_templates();
@@ -1016,10 +961,8 @@ public class DataModelUtil {
* @param propertyId property id
* @return Object property Value
*/
- public static Object getPropertyValue(NodeTemplate nodeTemplate,
- String propertyId) {
- if (nodeTemplate == null
- || nodeTemplate.getProperties() == null) {
+ public static Object getPropertyValue(NodeTemplate nodeTemplate, String propertyId) {
+ if (nodeTemplate == null || nodeTemplate.getProperties() == null) {
return null;
}
return nodeTemplate.getProperties().get(propertyId);
@@ -1033,15 +976,13 @@ public class DataModelUtil {
* @return node template properties
*/
public static Map<String, Object> getNodeTemplateProperties(ServiceTemplate serviceTemplate,
- String nodeTemplateId) {
- if (serviceTemplate == null
- || serviceTemplate.getTopology_template() == null
- || serviceTemplate.getTopology_template().getNode_templates() == null
- || serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId) == null) {
+ String nodeTemplateId) {
+ if (serviceTemplate == null || serviceTemplate.getTopology_template() == null
+ || serviceTemplate.getTopology_template().getNode_templates() == null
+ || serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId) == null) {
return null;
}
- return serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId)
- .getProperties();
+ return serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId).getProperties();
}
/**
@@ -1051,9 +992,7 @@ public class DataModelUtil {
* @param propertyKey the property key
* @param propertyValue the property value
*/
- public static void addNodeTemplateProperty(NodeTemplate nodeTemplate,
- String propertyKey,
- Object propertyValue) {
+ public static void addNodeTemplateProperty(NodeTemplate nodeTemplate, String propertyKey, Object propertyValue) {
if (Objects.isNull(nodeTemplate)) {
return;
}
@@ -1072,9 +1011,8 @@ public class DataModelUtil {
* @return the substitution mappings
*/
public static SubstitutionMapping getSubstitutionMappings(ServiceTemplate serviceTemplate) {
- if (serviceTemplate == null
- || serviceTemplate.getTopology_template() == null
- || serviceTemplate.getTopology_template().getSubstitution_mappings() == null) {
+ if (serviceTemplate == null || serviceTemplate.getTopology_template() == null
+ || serviceTemplate.getTopology_template().getSubstitution_mappings() == null) {
return null;
}
return serviceTemplate.getTopology_template().getSubstitution_mappings();
@@ -1088,11 +1026,8 @@ public class DataModelUtil {
* @param second the second requirement assignment object
* @return true if objects are equal and false otherwise
*/
- public static boolean compareRequirementAssignment(RequirementAssignment first,
- RequirementAssignment second) {
- return (
- first.getCapability().equals(second.getCapability())
- && first.getNode().equals(second.getNode())
+ public static boolean compareRequirementAssignment(RequirementAssignment first, RequirementAssignment second) {
+ return (first.getCapability().equals(second.getCapability()) && first.getNode().equals(second.getNode())
&& first.getRelationship().equals(second.getRelationship()));
}
@@ -1126,8 +1061,7 @@ public class DataModelUtil {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(obj);
//Deserialize object
- ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream
- .toByteArray());
+ ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
clonedObjectValue = objectInputStream.readObject();
} catch (NotSerializableException ex) {
@@ -1147,15 +1081,12 @@ public class DataModelUtil {
* @param nodeTemplate the node template
* @param count the count
*/
- public static void addSubstitutionFilteringProperty(String templateName,
- NodeTemplate nodeTemplate, int count) {
+ public static void addSubstitutionFilteringProperty(String templateName, NodeTemplate nodeTemplate, int count) {
Map<String, Object> serviceTemplateFilterPropertyValue = new HashMap<>();
Map<String, Object> properties = nodeTemplate.getProperties();
- serviceTemplateFilterPropertyValue.put(ToscaConstants
- .SUBSTITUTE_SERVICE_TEMPLATE_PROPERTY_NAME, templateName);
+ serviceTemplateFilterPropertyValue.put(ToscaConstants.SUBSTITUTE_SERVICE_TEMPLATE_PROPERTY_NAME, templateName);
serviceTemplateFilterPropertyValue.put(ToscaConstants.COUNT_PROPERTY_NAME, count);
- properties.put(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME,
- serviceTemplateFilterPropertyValue);
+ properties.put(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME, serviceTemplateFilterPropertyValue);
nodeTemplate.setProperties(properties);
}
@@ -1165,14 +1096,12 @@ public class DataModelUtil {
* @param computeNodeTemplateId compute node template id
* @param portNodeTemplate port node template
*/
- public static void addBindingReqFromPortToCompute(String computeNodeTemplateId,
- NodeTemplate portNodeTemplate) {
+ public static void addBindingReqFromPortToCompute(String computeNodeTemplateId, NodeTemplate portNodeTemplate) {
RequirementAssignment requirementAssignment = new RequirementAssignment();
requirementAssignment.setCapability(ToscaCapabilityType.NATIVE_NETWORK_BINDABLE);
requirementAssignment.setRelationship(ToscaRelationshipType.NATIVE_NETWORK_BINDS_TO);
requirementAssignment.setNode(computeNodeTemplateId);
- addRequirementAssignment(portNodeTemplate, ToscaConstants.BINDING_REQUIREMENT_ID,
- requirementAssignment);
+ addRequirementAssignment(portNodeTemplate, ToscaConstants.BINDING_REQUIREMENT_ID, requirementAssignment);
}
/**
@@ -1183,18 +1112,15 @@ public class DataModelUtil {
* @param mapping the mapping
* @return the substitution mapping
*/
- public static SubstitutionMapping createSubstitutionTemplateSubMapping(
- String nodeTypeKey,
- NodeType substitutionNodeType,
- Map<String, Map<String, List<String>>> mapping) {
+ public static SubstitutionMapping createSubstitutionTemplateSubMapping(String nodeTypeKey,
+ NodeType substitutionNodeType,
+ Map<String, Map<String, List<String>>> mapping) {
SubstitutionMapping substitutionMapping = new SubstitutionMapping();
substitutionMapping.setNode_type(nodeTypeKey);
- substitutionMapping.setCapabilities(
- manageCapabilityMapping(substitutionNodeType.getCapabilities(), mapping.get(ToscaConstants
- .CAPABILITY)));
+ substitutionMapping.setCapabilities(manageCapabilityMapping(substitutionNodeType.getCapabilities(),
+ mapping.get(ToscaConstants.CAPABILITY)));
substitutionMapping.setRequirements(
- manageRequirementMapping(substitutionNodeType.getRequirements(),
- mapping.get("requirement")));
+ manageRequirementMapping(substitutionNodeType.getRequirements(), mapping.get("requirement")));
return substitutionMapping;
}
@@ -1207,8 +1133,8 @@ public class DataModelUtil {
* @param capabilityAttributes the capability attributes
*/
public static void addNodeTemplateCapability(NodeTemplate nodeTemplate, String capabilityId,
- Map<String, Object> capabilityProperties,
- Map<String, Object> capabilityAttributes) {
+ Map<String, Object> capabilityProperties,
+ Map<String, Object> capabilityAttributes) {
Map<String, CapabilityAssignment> capabilities = nodeTemplate.getCapabilities();
if (Objects.isNull(capabilities)) {
capabilities = new HashMap<>();
@@ -1220,9 +1146,8 @@ public class DataModelUtil {
nodeTemplate.setCapabilities(capabilities);
}
- private static Map<String, List<String>> manageRequirementMapping(
- List<Map<String, RequirementDefinition>> requirementList,
- Map<String, List<String>> requirementSubstitutionMapping) {
+ private static Map<String, List<String>> manageRequirementMapping(List<Map<String, RequirementDefinition>> requirementList,
+ Map<String, List<String>> requirementSubstitutionMapping) {
if (requirementList == null) {
return null;
}
@@ -1239,9 +1164,8 @@ public class DataModelUtil {
return requirementMapping;
}
- private static Map<String, List<String>> manageCapabilityMapping(
- Map<String, CapabilityDefinition> capabilities,
- Map<String, List<String>> capabilitySubstitutionMapping) {
+ private static Map<String, List<String>> manageCapabilityMapping(Map<String, CapabilityDefinition> capabilities,
+ Map<String, List<String>> capabilitySubstitutionMapping) {
if (capabilities == null) {
return null;
}
@@ -1257,14 +1181,18 @@ public class DataModelUtil {
return capabilityMapping;
}
-
- public static void addInterfaceOperation(ServiceTemplate serviceTemplate,
- String interfaceId,
- String operationId,
- OperationDefinition operationDefinition) {
+ /**
+ * Add interface operation.
+ *
+ * @param serviceTemplate the service template
+ * @param interfaceId the interface id
+ * @param operationId the operation id
+ * @param operationDefinition the operation definition
+ */
+ public static void addInterfaceOperation(ServiceTemplate serviceTemplate, String interfaceId, String operationId,
+ OperationDefinition operationDefinition) {
Map<String, Object> interfaceTypes = serviceTemplate.getInterface_types();
- if (MapUtils.isEmpty(interfaceTypes)
- || Objects.isNull(interfaceTypes.get(interfaceId))) {
+ if (MapUtils.isEmpty(interfaceTypes) || Objects.isNull(interfaceTypes.get(interfaceId))) {
return;
}
@@ -1289,8 +1217,7 @@ public class DataModelUtil {
interfaceValue -> convertedInterfaceTypes.put(interfaceEntry.getKey(), interfaceValue));
} catch (Exception e) {
LOGGER.error("Cannot create interface object", e);
- throw new CoreException(
- new ToscaInvalidInterfaceValueErrorBuilder(e.getMessage()).build());
+ throw new CoreException(new ToscaInvalidInterfaceValueErrorBuilder(e.getMessage()).build());
}
}
@@ -1298,35 +1225,23 @@ public class DataModelUtil {
}
public static <T extends InterfaceDefinition> Optional<T> convertObjToInterfaceDefinition(String interfaceId,
- Object interfaceObj,
- Class<T> interfaceClass) {
+ Object interfaceObj,
+ Class<T> interfaceClass) {
try {
- Optional<T> interfaceDefinition =
- CommonUtil.createObjectUsingSetters(interfaceObj, interfaceClass);
+ Optional<T> interfaceDefinition = CommonUtil.createObjectUsingSetters(interfaceObj, interfaceClass);
interfaceDefinition.ifPresent(interfaceDefinitionType1 -> updateInterfaceDefinitionOperations(
- CommonUtil.getObjectAsMap(interfaceObj),
- interfaceDefinitionType1, getOperationClass(interfaceClass)));
+ CommonUtil.getObjectAsMap(interfaceObj), interfaceDefinitionType1));
return interfaceDefinition;
} catch (Exception ex) {
- LOGGER.error("Could not create {} from {}", InterfaceDefinitionType.class.getName(),
- interfaceId, ex);
- throw new CoreException(
- new CreateInterfaceObjectErrorBuilder(InterfaceDefinitionType.class.getName(),
- interfaceId,
- ex.getMessage()).build());
+ LOGGER.error("Could not create {} from {}", InterfaceDefinitionType.class.getName(), interfaceId, ex);
+ throw new CoreException(new CreateInterfaceObjectErrorBuilder(InterfaceDefinitionType.class.getName(),
+ interfaceId, ex.getMessage()).build());
}
}
- private static <T extends OperationDefinition, V extends InterfaceDefinition> Class<T> getOperationClass(
- Class<V> interfaceClass) {
- return interfaceClass.equals(InterfaceDefinitionType.class)
- ? (Class<T>) OperationDefinitionType.class
- : (Class<T>) OperationDefinitionTemplate.class;
- }
- public static Optional<InterfaceType> convertObjToInterfaceType(String interfaceId,
- Object interfaceObj) {
+ public static Optional<InterfaceType> convertObjToInterfaceType(String interfaceId, Object interfaceObj) {
try {
Optional<InterfaceType> interfaceType =
CommonUtil.createObjectUsingSetters(interfaceObj, InterfaceType.class);
@@ -1336,9 +1251,8 @@ public class DataModelUtil {
return interfaceType;
} catch (Exception ex) {
LOGGER.error("Could not create {} from {}", InterfaceType.class.getName(), interfaceId, ex);
- throw new CoreException(
- new CreateInterfaceObjectErrorBuilder(InterfaceType.class.getName(), interfaceId,
- ex.getMessage()).build());
+ throw new CoreException(new CreateInterfaceObjectErrorBuilder(InterfaceType.class.getName(), interfaceId,
+ ex.getMessage()).build());
}
}
@@ -1346,6 +1260,10 @@ public class DataModelUtil {
return converInterfaceToToscaInterfaceObj(interfaceType);
}
+ public static Optional<Object> convertInterfaceDefinitionTypeToObj(InterfaceDefinitionType interfaceDefinitionType) {
+ return converInterfaceToToscaInterfaceObj(interfaceDefinitionType);
+ }
+
private static Optional<Object> converInterfaceToToscaInterfaceObj(Object interfaceEntity) {
if (Objects.isNull(interfaceEntity)) {
return Optional.empty();
@@ -1363,75 +1281,53 @@ public class DataModelUtil {
return Optional.of(objectMapper.convertValue(interfaceAsMap, Object.class));
}
- private static void updateInterfaceTypeOperations(Map<String, Object> interfaceAsMap,
- InterfaceType interfaceType) {
+ private static void updateInterfaceTypeOperations(Map<String, Object> interfaceAsMap, InterfaceType interfaceType) {
Set<String> fieldNames = CommonUtil.getClassFieldNames(InterfaceType.class);
for (Map.Entry<String, Object> entry : interfaceAsMap.entrySet()) {
Optional<? extends OperationDefinition> operationDefinition =
- createOperation(entry.getKey(), entry.getValue(), fieldNames,
- OperationDefinitionType.class);
- operationDefinition
- .ifPresent(operation -> interfaceType.addOperation(entry.getKey(), operation));
+ createOperation(entry.getKey(), entry.getValue(), fieldNames, OperationDefinitionType.class);
+ operationDefinition.ifPresent(operation -> interfaceType.addOperation(entry.getKey(), operation));
}
}
private static Optional<? extends OperationDefinition> createOperation(String propertyName,
- Object operationCandidate,
- Set<String> fieldNames,
- Class<? extends OperationDefinition>
- operationClass) {
+ Object operationCandidate,
+ Set<String> fieldNames,
+ Class<? extends OperationDefinition> operationClass) {
if (!fieldNames.contains(propertyName)) {
try {
return CommonUtil.createObjectUsingSetters(operationCandidate, operationClass);
} catch (Exception ex) {
LOGGER.error("Could not create Operation from {}", propertyName, ex);
- throw new CoreException(
- new CreateInterfaceOperationObjectErrorBuilder(propertyName, ex.getMessage()).build());
+ throw new CoreException(new CreateInterfaceOperationObjectErrorBuilder(propertyName, ex.getMessage())
+ .build());
}
}
return Optional.empty();
}
- private static <T extends OperationDefinition> void updateInterfaceDefinitionOperations(Map<String, Object>
- interfaceAsMap,
- InterfaceDefinition
- interfaceDefinition,
- Class<T> operationClass) {
- Set<String> fieldNames = CommonUtil.getClassFieldNames(interfaceDefinition.getClass());
- Optional<? extends OperationDefinition> operationDefinition;
+ private static <T extends OperationDefinition> void updateInterfaceDefinitionOperations(Map<String, Object> interfaceAsMap,
+ InterfaceDefinition interfaceDefinition) {
+ {
+ Set<String> fieldNames = CommonUtil.getClassFieldNames(InterfaceDefinitionType.class);
+ Optional<? extends OperationDefinition> operationDefinition;
- for (Map.Entry<String, Object> entry : interfaceAsMap.entrySet()) {
- operationDefinition =
- createOperation(entry.getKey(), entry.getValue(), fieldNames, operationClass);
- operationDefinition.ifPresent(operation -> addOperationToInterface(interfaceDefinition,
- entry.getKey(), operation));
+ for (Map.Entry<String, Object> entry : interfaceAsMap.entrySet()) {
+ operationDefinition = createOperation(entry.getKey(), entry.getValue(), fieldNames,
+ interfaceDefinition instanceof InterfaceDefinitionType ? OperationDefinitionType.class :
+ OperationDefinitionTemplate.class);
+ operationDefinition.ifPresent(operation -> interfaceDefinition.addOperation(entry.getKey(), operation));
+ }
}
}
- private static void addOperationToInterface(InterfaceDefinition interfaceDefinition,
- String operationName,
- OperationDefinition operationDefinition) {
- if (interfaceDefinition instanceof InterfaceDefinitionType) {
- InterfaceDefinitionType interfaceDefinitionType =
- (InterfaceDefinitionType) interfaceDefinition;
- interfaceDefinitionType.addOperation(operationName, (OperationDefinitionType)
- operationDefinition);
- }
- if (interfaceDefinition instanceof InterfaceDefinitionTemplate) {
- InterfaceDefinitionTemplate interfaceDefinitionTemplate =
- (InterfaceDefinitionTemplate) interfaceDefinition;
- interfaceDefinitionTemplate.addOperation(operationName, (OperationDefinitionTemplate)
- operationDefinition);
- }
- }
public static void addSubstitutionNodeTypeRequirements(NodeType substitutionNodeType,
- List<Map<String, RequirementDefinition>>
- requirementsList,
- String templateName) {
+ List<Map<String, RequirementDefinition>> requirementsList,
+ String templateName) {
if (CollectionUtils.isEmpty(requirementsList)) {
return;
}
@@ -1448,9 +1344,27 @@ public class DataModelUtil {
}
}
- public static boolean isNodeTemplateSectionMissingFromServiceTemplate(
- ServiceTemplate serviceTemplate) {
- return Objects.isNull(serviceTemplate.getTopology_template())
- || MapUtils.isEmpty(serviceTemplate.getTopology_template().getNode_templates());
+ public static boolean isNodeTemplateSectionMissingFromServiceTemplate(ServiceTemplate serviceTemplate) {
+ return Objects.isNull(serviceTemplate.getTopology_template()) || MapUtils.isEmpty(
+ serviceTemplate.getTopology_template().getNode_templates());
+ }
+
+ /**
+ * Gets relationship template in a service template according to the relationship id.
+ *
+ * @param serviceTemplate the service template
+ * @param relationshipId the relationship id
+ * @return the relationship template
+ */
+ public static Optional<RelationshipTemplate> getRelationshipTemplate(ServiceTemplate serviceTemplate,
+ String relationshipId) {
+ if (serviceTemplate == null || serviceTemplate.getTopology_template() == null
+ || serviceTemplate.getTopology_template().getRelationship_templates() == null
+ || serviceTemplate.getTopology_template().getRelationship_templates().get(relationshipId) == null) {
+ return Optional.empty();
+ }
+ return Optional.of(serviceTemplate.getTopology_template().getRelationship_templates().get(relationshipId));
}
+
+
}
diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaAnalyzerService.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaAnalyzerService.java
index e4d75c1296..34f5a905fd 100644
--- a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaAnalyzerService.java
+++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaAnalyzerService.java
@@ -17,7 +17,7 @@
package org.openecomp.sdc.tosca.services;
import org.openecomp.sdc.tosca.datatypes.ToscaElementTypes;
-import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.ToscaFlatData;
import org.onap.sdc.tosca.datatypes.model.CapabilityDefinition;
import org.onap.sdc.tosca.datatypes.model.DefinitionOfDataType;
import org.onap.sdc.tosca.datatypes.model.InterfaceDefinitionType;
@@ -33,67 +33,62 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
-public interface ToscaAnalyzerService {
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
- /*
- node template with type equal to node type or derived from node type
- */
- Map<String, NodeTemplate> getNodeTemplatesByType(ServiceTemplate serviceTemplate, String nodeType,
- ToscaServiceModel toscaServiceModel);
+public interface ToscaAnalyzerService {
- Optional<NodeType> fetchNodeType(String nodeTypeKey, Collection<ServiceTemplate> serviceTemplates);
+ /*
+ node template with type equal to node type or derived from node type
+ */
+ Map<String, NodeTemplate> getNodeTemplatesByType(ServiceTemplate serviceTemplate, String nodeType,
+ ToscaServiceModel toscaServiceModel);
- boolean isTypeOf(NodeTemplate nodeTemplate, String nodeType, ServiceTemplate serviceTemplate,
- ToscaServiceModel toscaServiceModel);
+ Optional<NodeType> fetchNodeType(String nodeTypeKey, Collection<ServiceTemplate> serviceTemplates);
- List<RequirementAssignment> getRequirements(NodeTemplate nodeTemplate, String requirementId);
+ boolean isTypeOf(NodeTemplate nodeTemplate, String nodeType, ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaServiceModel);
- Optional<NodeTemplate> getNodeTemplateById(ServiceTemplate serviceTemplate,
- String nodeTemplateId);
+ boolean isTypeOf(InterfaceDefinitionType interfaceDefinition, String interfaceType, ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaServiceModel);
- Optional<String> getSubstituteServiceTemplateName(String substituteNodeTemplateId,
- NodeTemplate substitutableNodeTemplate);
+ boolean isTypeOf(DefinitionOfDataType parameterDefinition, String dataType, ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaServiceModel);
- Map<String, NodeTemplate> getSubstitutableNodeTemplates(ServiceTemplate serviceTemplate);
+ List<RequirementAssignment> getRequirements(NodeTemplate nodeTemplate, String requirementId);
- Optional<Map.Entry<String, NodeTemplate>> getSubstitutionMappedNodeTemplateByExposedReq(
- String substituteServiceTemplateFileName, ServiceTemplate substituteServiceTemplate,
- String requirementId);
+ Optional<NodeTemplate> getNodeTemplateById(ServiceTemplate serviceTemplate, String nodeTemplateId);
- /*
- match only for the input which is not null
- */
- boolean isDesiredRequirementAssignment(RequirementAssignment requirementAssignment,
- String capability, String node, String relationship);
+ Optional<String> getSubstituteServiceTemplateName(String substituteNodeTemplateId,
+ NodeTemplate substitutableNodeTemplate);
- Object getFlatEntity(ToscaElementTypes elementType, String type, ServiceTemplate serviceTemplate,
- ToscaServiceModel toscaModel);
+ Map<String, NodeTemplate> getSubstitutableNodeTemplates(ServiceTemplate serviceTemplate);
- boolean isSubstitutableNodeTemplate(NodeTemplate nodeTemplate);
+ Optional<Map.Entry<String, NodeTemplate>> getSubstitutionMappedNodeTemplateByExposedReq(String substituteServiceTemplateFileName,
+ ServiceTemplate substituteServiceTemplate,
+ String requirementId);
- NodeType createInitSubstitutionNodeType(ServiceTemplate substitutionServiceTemplate,
- String nodeTypeDerivedFromValue);
+ /*
+ match only for the input which is not null
+ */
+ boolean isDesiredRequirementAssignment(RequirementAssignment requirementAssignment, String capability, String node,
+ String relationship);
- boolean isRequirementExistInNodeTemplate(NodeTemplate nodeTemplate,
- String requirementId,
- RequirementAssignment requirementAssignment);
+ ToscaFlatData getFlatEntity(ToscaElementTypes elementType, String type, ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaModel);
- Map<String, PropertyDefinition> manageSubstitutionNodeTypeProperties(
- ServiceTemplate substitutionServiceTemplate);
+ boolean isSubstitutableNodeTemplate(NodeTemplate nodeTemplate);
- Map<String, CapabilityDefinition> calculateExposedCapabilities(
- Map<String, CapabilityDefinition> nodeTypeCapabilitiesDefinition,
- Map<String, Map<String, RequirementAssignment>> fullFilledRequirementsDefinitionMap);
+ NodeType createInitSubstitutionNodeType(ServiceTemplate substitutionServiceTemplate,
+ String nodeTypeDerivedFromValue);
- List<Map<String, RequirementDefinition>> calculateExposedRequirements(
- List<Map<String, RequirementDefinition>> nodeTypeRequirementsDefinitionList,
- Map<String, RequirementAssignment> nodeTemplateRequirementsAssignment);
+ boolean isRequirementExistInNodeTemplate(NodeTemplate nodeTemplate, String requirementId,
+ RequirementAssignment requirementAssignment);
- boolean isTypeOf(InterfaceDefinitionType interfaceDefinition, String interfaceType,
- ServiceTemplate
- serviceTemplate, ToscaServiceModel toscaServiceModel);
+ Map<String, PropertyDefinition> manageSubstitutionNodeTypeProperties(ServiceTemplate substitutionServiceTemplate);
- boolean isTypeOf(DefinitionOfDataType parameterDefinition, String dataType, ServiceTemplate
- serviceTemplate, ToscaServiceModel toscaServiceModel);
+ Map<String, CapabilityDefinition> calculateExposedCapabilities(Map<String, CapabilityDefinition> nodeTypeCapabilitiesDefinition,
+ Map<String, Map<String, RequirementAssignment>> fullFilledRequirementsDefinitionMap);
+ List<Map<String, RequirementDefinition>> calculateExposedRequirements(List<Map<String, RequirementDefinition>> nodeTypeRequirementsDefinitionList,
+ Map<String, RequirementAssignment> nodeTemplateRequirementsAssignment);
}
diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaConstants.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaConstants.java
index 4ce2535401..d81983057d 100644
--- a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaConstants.java
+++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/ToscaConstants.java
@@ -36,6 +36,9 @@ public class ToscaConstants {
//General
public static final String TOSCA_DEFINITIONS_VERSION = "tosca_simple_yaml_1_0_0";
public static final String MODELABLE_ENTITY_NAME_SELF = "SELF";
+ public static final String MODELABLE_ENTITY_NAME_HOST = "HOST";
+ public static final String MODELABLE_ENTITY_NAME_SOURCE = "SOURCE";
+ public static final String MODELABLE_ENTITY_NAME_TARGET = "TARGET";
public static final String NODE_TEMPLATE_DIRECTIVE_SUBSTITUTABLE = "substitutable";
public static final String UNBOUNDED = "UNBOUNDED";
public static final String ST_METADATA_TEMPLATE_NAME = "template_name";
diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/impl/ToscaAnalyzerServiceImpl.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/impl/ToscaAnalyzerServiceImpl.java
index 46d9b902ca..46e58bdc81 100644
--- a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/impl/ToscaAnalyzerServiceImpl.java
+++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/impl/ToscaAnalyzerServiceImpl.java
@@ -22,7 +22,7 @@ import org.apache.commons.lang3.StringUtils;
import org.openecomp.core.utilities.CommonMethods;
import org.openecomp.sdc.common.errors.CoreException;
import org.openecomp.sdc.tosca.datatypes.ToscaElementTypes;
-import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.ToscaFlatData;
import org.onap.sdc.tosca.datatypes.model.AttributeDefinition;
import org.onap.sdc.tosca.datatypes.model.CapabilityDefinition;
import org.onap.sdc.tosca.datatypes.model.CapabilityType;
@@ -38,18 +38,18 @@ import org.onap.sdc.tosca.datatypes.model.PropertyType;
import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
import org.onap.sdc.tosca.datatypes.model.RequirementDefinition;
import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.errors.CreateInterfaceObjectErrorBuilder;
import org.openecomp.sdc.tosca.errors.ToscaElementTypeNotFoundErrorBuilder;
import org.openecomp.sdc.tosca.errors.ToscaFileNotFoundErrorBuilder;
import org.openecomp.sdc.tosca.errors.ToscaInvalidEntryNotFoundErrorBuilder;
import org.openecomp.sdc.tosca.errors.ToscaInvalidSubstituteNodeTemplatePropertiesErrorBuilder;
import org.openecomp.sdc.tosca.errors.ToscaInvalidSubstitutionServiceTemplateErrorBuilder;
import org.openecomp.sdc.tosca.services.DataModelUtil;
+import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
import org.openecomp.sdc.tosca.services.ToscaAnalyzerService;
import org.openecomp.sdc.tosca.services.ToscaConstants;
-import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
-import org.openecomp.sdc.tosca.services.ToscaUtil;
-import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -60,877 +60,911 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import java.lang.reflect.InvocationTargetException;
+
+import org.openecomp.sdc.tosca.services.ToscaUtil;
public class ToscaAnalyzerServiceImpl implements ToscaAnalyzerService {
- private final String GET_NODE_TYPE_METHOD_NAME = "getNode_types";
- private final String GET_DERIVED_FROM_METHOD_NAME = "getDerived_from";
- private final String GET_TYPE_METHOD_NAME = "getType";
- private final String GET_DATA_TYPE_METHOD_NAME = "getData_types";
- private final String GET_INTERFACE_TYPE_METHOD_NAME = "getInterface_types";
- private final String TOSCA_DOT = "tosca.";
- private final String DOT_ROOT = ".Root";
-
- @Override
- public List<Map<String, RequirementDefinition>> calculateExposedRequirements(
- List<Map<String, RequirementDefinition>> nodeTypeRequirementsDefinitionList,
- Map<String, RequirementAssignment> nodeTemplateRequirementsAssignment) {
-
- if (nodeTypeRequirementsDefinitionList == null) {
- return Collections.emptyList();
- }
- for (Map.Entry<String, RequirementAssignment> entry : nodeTemplateRequirementsAssignment
- .entrySet()) {
- if (entry.getValue().getNode() != null) {
- Optional<RequirementDefinition> requirementDefinition =
- DataModelUtil.getRequirementDefinition(nodeTypeRequirementsDefinitionList, entry
- .getKey());
- RequirementDefinition cloneRequirementDefinition;
- if (requirementDefinition.isPresent()) {
- cloneRequirementDefinition = requirementDefinition.get().clone();
- updateRequirementDefinition(nodeTypeRequirementsDefinitionList, entry,
- cloneRequirementDefinition);
- }
- } else {
- for (Map<String, RequirementDefinition> nodeTypeRequirementsMap :
- nodeTypeRequirementsDefinitionList) {
- updateMinMaxOccurencesForNodeTypeRequirement(entry, nodeTypeRequirementsMap);
- }
- }
- }
- return nodeTypeRequirementsDefinitionList;
- }
-
- private void updateMinMaxOccurencesForNodeTypeRequirement(
- Map.Entry<String, RequirementAssignment> entry,
- Map<String, RequirementDefinition> nodeTypeRequirementsMap) {
- Object max = nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences() != null
- && nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences().length > 0
- ? nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences()[1] : 1;
- Object min = nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences() != null
- && nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences().length > 0
- ? nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences()[0] : 1;
- nodeTypeRequirementsMap.get(entry.getKey()).setOccurrences(new Object[]{min, max});
- }
-
- private void updateRequirementDefinition(
- List<Map<String, RequirementDefinition>> nodeTypeRequirementsDefinitionList,
- Map.Entry<String, RequirementAssignment> entry,
- RequirementDefinition cloneRequirementDefinition) {
- if (!evaluateRequirementFulfillment(cloneRequirementDefinition)) {
- CommonMethods.mergeEntryInList(entry.getKey(), cloneRequirementDefinition,
- nodeTypeRequirementsDefinitionList);
- } else {
- DataModelUtil.removeRequirementsDefinition(nodeTypeRequirementsDefinitionList, entry
- .getKey());
- }
- }
-
- private static boolean evaluateRequirementFulfillment(RequirementDefinition
- requirementDefinition) {
- Object[] occurrences = requirementDefinition.getOccurrences();
- if (occurrences == null) {
- requirementDefinition.setOccurrences(new Object[]{1, 1});
- return false;
- }
- if (occurrences[1].equals(ToscaConstants.UNBOUNDED)) {
- return false;
- }
-
- if (occurrences[1].equals(1)) {
- return true;
- }
- occurrences[1] = (Integer) occurrences[1] - 1;
- return false;
- }
-
- @Override
- public Map<String, CapabilityDefinition> calculateExposedCapabilities(
- Map<String, CapabilityDefinition> nodeTypeCapabilitiesDefinition,
- Map<String, Map<String, RequirementAssignment>> fullFilledRequirementsDefinitionMap) {
-
- String capabilityKey;
- String capability;
- String node;
- for (Map.Entry<String, Map<String, RequirementAssignment>> entry :
- fullFilledRequirementsDefinitionMap.entrySet()) {
- for (Map.Entry<String, RequirementAssignment> fullFilledEntry : entry.getValue().entrySet()) {
-
- capability = fullFilledEntry.getValue().getCapability();
- node = fullFilledEntry.getValue().getNode();
- capabilityKey = capability + "_" + node;
- CapabilityDefinition capabilityDefinition = nodeTypeCapabilitiesDefinition.get(
- capabilityKey);
- if (capabilityDefinition != null) {
- CapabilityDefinition clonedCapabilityDefinition = capabilityDefinition.clone();
- nodeTypeCapabilitiesDefinition.put(capabilityKey, capabilityDefinition.clone());
- updateNodeTypeCapabilitiesDefinition(nodeTypeCapabilitiesDefinition, capabilityKey,
- clonedCapabilityDefinition);
- }
- }
- }
-
- Map<String, CapabilityDefinition> exposedCapabilitiesDefinition = new HashMap<>();
- for (Map.Entry<String, CapabilityDefinition> entry : nodeTypeCapabilitiesDefinition
- .entrySet()) {
- exposedCapabilitiesDefinition.put(entry.getKey(), entry.getValue());
- }
- return exposedCapabilitiesDefinition;
- }
-
- private void updateNodeTypeCapabilitiesDefinition(
- Map<String, CapabilityDefinition> nodeTypeCapabilitiesDefinition, String capabilityKey,
- CapabilityDefinition clonedCapabilityDefinition) {
- if (evaluateCapabilityFulfillment(clonedCapabilityDefinition)) {
- nodeTypeCapabilitiesDefinition.remove(capabilityKey);
- } else {
- nodeTypeCapabilitiesDefinition.put(capabilityKey, clonedCapabilityDefinition);
- }
- }
-
- private static boolean evaluateCapabilityFulfillment(CapabilityDefinition capabilityDefinition) {
-
- Object[] occurrences = capabilityDefinition.getOccurrences();
- if (occurrences == null) {
- capabilityDefinition.setOccurrences(new Object[]{1, ToscaConstants.UNBOUNDED});
- return false;
- }
- if (occurrences[1].equals(ToscaConstants.UNBOUNDED)) {
- return false;
- }
-
- if (occurrences[1].equals(1)) {
- return true;
- }
- occurrences[1] = (Integer) occurrences[1] - 1;
- return false;
- }
-
- /*
- node template with type equal to node type or derived from node type
+
+ private final String GET_NODE_TYPE_METHOD_NAME = "getNode_types";
+ private final String GET_DERIVED_FROM_METHOD_NAME = "getDerived_from";
+ private final String GET_TYPE_METHOD_NAME = "getType";
+ private final String GET_DATA_TYPE_METHOD_NAME = "getData_types";
+ private final String GET_INTERFACE_TYPE_METHOD_NAME = "getInterface_types";
+ private final String TOSCA_DOT = "tosca.";
+ private final String DOT_ROOT = ".Root";
+
+ @Override
+ public List<Map<String, RequirementDefinition>> calculateExposedRequirements(List<Map<String, RequirementDefinition>> nodeTypeRequirementsDefinitionList,
+ Map<String, RequirementAssignment> nodeTemplateRequirementsAssignment) {
+
+ if (nodeTypeRequirementsDefinitionList == null) {
+ return Collections.emptyList();
+ }
+ for (Map.Entry<String, RequirementAssignment> entry : nodeTemplateRequirementsAssignment.entrySet()) {
+ if (entry.getValue().getNode() != null) {
+ Optional<RequirementDefinition> requirementDefinition =
+ DataModelUtil.getRequirementDefinition(nodeTypeRequirementsDefinitionList, entry.getKey());
+ RequirementDefinition cloneRequirementDefinition;
+ if (requirementDefinition.isPresent()) {
+ cloneRequirementDefinition = requirementDefinition.get().clone();
+ updateRequirementDefinition(nodeTypeRequirementsDefinitionList, entry, cloneRequirementDefinition);
+ }
+ } else {
+ for (Map<String, RequirementDefinition> nodeTypeRequirementsMap : nodeTypeRequirementsDefinitionList) {
+ updateMinMaxOccurencesForNodeTypeRequirement(entry, nodeTypeRequirementsMap);
+ }
+ }
+ }
+ return nodeTypeRequirementsDefinitionList;
+ }
+
+ private void updateMinMaxOccurencesForNodeTypeRequirement(Map.Entry<String, RequirementAssignment> entry,
+ Map<String, RequirementDefinition> nodeTypeRequirementsMap) {
+ Object max = nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences() != null
+ && nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences().length > 0 ?
+ nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences()[1] : 1;
+ Object min = nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences() != null
+ && nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences().length > 0 ?
+ nodeTypeRequirementsMap.get(entry.getKey()).getOccurrences()[0] : 1;
+ nodeTypeRequirementsMap.get(entry.getKey()).setOccurrences(new Object[] {min, max});
+ }
+
+ private void updateRequirementDefinition(List<Map<String, RequirementDefinition>> nodeTypeRequirementsDefinitionList,
+ Map.Entry<String, RequirementAssignment> entry,
+ RequirementDefinition cloneRequirementDefinition) {
+ if (!evaluateRequirementFulfillment(cloneRequirementDefinition)) {
+ CommonMethods
+ .mergeEntryInList(entry.getKey(), cloneRequirementDefinition, nodeTypeRequirementsDefinitionList);
+ } else {
+ DataModelUtil.removeRequirementsDefinition(nodeTypeRequirementsDefinitionList, entry.getKey());
+ }
+ }
+
+ private static boolean evaluateRequirementFulfillment(RequirementDefinition requirementDefinition) {
+ Object[] occurrences = requirementDefinition.getOccurrences();
+ if (occurrences == null) {
+ requirementDefinition.setOccurrences(new Object[] {1, 1});
+ return false;
+ }
+ if (occurrences[1].equals(ToscaConstants.UNBOUNDED)) {
+ return false;
+ }
+
+ if (occurrences[1].equals(1)) {
+ return true;
+ }
+ occurrences[1] = (Integer) occurrences[1] - 1;
+ return false;
+ }
+
+ @Override
+ public Map<String, CapabilityDefinition> calculateExposedCapabilities(Map<String, CapabilityDefinition> nodeTypeCapabilitiesDefinition,
+ Map<String, Map<String, RequirementAssignment>> fullFilledRequirementsDefinitionMap) {
+
+ String capabilityKey;
+ String capability;
+ String node;
+ for (Map.Entry<String, Map<String, RequirementAssignment>> entry : fullFilledRequirementsDefinitionMap
+ .entrySet()) {
+ for (Map.Entry<String, RequirementAssignment> fullFilledEntry : entry.getValue().entrySet()) {
+
+ capability = fullFilledEntry.getValue().getCapability();
+ node = fullFilledEntry.getValue().getNode();
+ capabilityKey = capability + "_" + node;
+ CapabilityDefinition capabilityDefinition = nodeTypeCapabilitiesDefinition.get(capabilityKey);
+ if (capabilityDefinition != null) {
+ CapabilityDefinition clonedCapabilityDefinition = capabilityDefinition.clone();
+ nodeTypeCapabilitiesDefinition.put(capabilityKey, capabilityDefinition.clone());
+ updateNodeTypeCapabilitiesDefinition(nodeTypeCapabilitiesDefinition, capabilityKey,
+ clonedCapabilityDefinition);
+ }
+ }
+ }
+
+ Map<String, CapabilityDefinition> exposedCapabilitiesDefinition = new HashMap<>();
+ for (Map.Entry<String, CapabilityDefinition> entry : nodeTypeCapabilitiesDefinition.entrySet()) {
+ exposedCapabilitiesDefinition.put(entry.getKey(), entry.getValue());
+ }
+ return exposedCapabilitiesDefinition;
+ }
+
+ private void updateNodeTypeCapabilitiesDefinition(Map<String, CapabilityDefinition> nodeTypeCapabilitiesDefinition,
+ String capabilityKey,
+ CapabilityDefinition clonedCapabilityDefinition) {
+ if (evaluateCapabilityFulfillment(clonedCapabilityDefinition)) {
+ nodeTypeCapabilitiesDefinition.remove(capabilityKey);
+ } else {
+ nodeTypeCapabilitiesDefinition.put(capabilityKey, clonedCapabilityDefinition);
+ }
+ }
+
+ private static boolean evaluateCapabilityFulfillment(CapabilityDefinition capabilityDefinition) {
+
+ Object[] occurrences = capabilityDefinition.getOccurrences();
+ if (occurrences == null) {
+ capabilityDefinition.setOccurrences(new Object[] {1, ToscaConstants.UNBOUNDED});
+ return false;
+ }
+ if (occurrences[1].equals(ToscaConstants.UNBOUNDED)) {
+ return false;
+ }
+
+ if (occurrences[1].equals(1)) {
+ return true;
+ }
+ occurrences[1] = (Integer) occurrences[1] - 1;
+ return false;
+ }
+
+ /*
+ node template with type equal to node type or derived from node type
+ */
+ @Override
+ public Map<String, NodeTemplate> getNodeTemplatesByType(ServiceTemplate serviceTemplate, String nodeType,
+ ToscaServiceModel toscaServiceModel) {
+ Map<String, NodeTemplate> nodeTemplates = new HashMap<>();
+
+ if (Objects.nonNull(serviceTemplate.getTopology_template()) && MapUtils.isNotEmpty(
+ serviceTemplate.getTopology_template().getNode_templates())) {
+ for (Map.Entry<String, NodeTemplate> nodeTemplateEntry : serviceTemplate.getTopology_template()
+ .getNode_templates().entrySet()) {
+ if (isTypeOf(nodeTemplateEntry.getValue(), nodeType, serviceTemplate, toscaServiceModel)) {
+ nodeTemplates.put(nodeTemplateEntry.getKey(), nodeTemplateEntry.getValue());
+ }
+
+ }
+ }
+ return nodeTemplates;
+ }
+
+ @Override
+ public Optional<NodeType> fetchNodeType(String nodeTypeKey, Collection<ServiceTemplate> serviceTemplates) {
+ Optional<Map<String, NodeType>> nodeTypeMap = serviceTemplates.stream().map(ServiceTemplate::getNode_types)
+ .filter(nodeTypes -> Objects.nonNull(nodeTypes)
+ && nodeTypes
+ .containsKey(
+ nodeTypeKey))
+ .findFirst();
+ return nodeTypeMap.map(stringNodeTypeMap -> stringNodeTypeMap.get(nodeTypeKey));
+ }
+
+ @Override
+ public boolean isTypeOf(NodeTemplate nodeTemplate, String nodeType, ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaServiceModel) {
+ return isTypeOf(nodeTemplate, nodeType, GET_NODE_TYPE_METHOD_NAME, serviceTemplate, toscaServiceModel);
+ }
+
+ @Override
+ public List<RequirementAssignment> getRequirements(NodeTemplate nodeTemplate, String requirementId) {
+ List<RequirementAssignment> requirements = new ArrayList<>();
+ List<Map<String, RequirementAssignment>> requirementList = nodeTemplate.getRequirements();
+ if (requirementList != null) {
+ requirementList.stream().filter(reqMap -> reqMap.get(requirementId) != null).forEach(reqMap -> {
+ ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
+ RequirementAssignment reqAssignment = toscaExtensionYamlUtil.yamlToObject(
+ toscaExtensionYamlUtil.objectToYaml(reqMap.get(requirementId)), RequirementAssignment.class);
+ requirements.add(reqAssignment);
+ });
+ }
+ return requirements;
+ }
+
+ @Override
+ public Optional<NodeTemplate> getNodeTemplateById(ServiceTemplate serviceTemplate, String nodeTemplateId) {
+ if ((serviceTemplate.getTopology_template() != null) && (serviceTemplate.getTopology_template()
+ .getNode_templates() != null)
+ && (serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId) != null)) {
+ return Optional.of(serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId));
+ }
+ return Optional.empty();
+ }
+
+ @Override
+ public Optional<String> getSubstituteServiceTemplateName(String substituteNodeTemplateId,
+ NodeTemplate substitutableNodeTemplate) {
+ if (!isSubstitutableNodeTemplate(substitutableNodeTemplate)) {
+ return Optional.empty();
+ }
+
+ if (substitutableNodeTemplate.getProperties() != null &&
+ substitutableNodeTemplate.getProperties().get(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME)
+ != null) {
+ Object serviceTemplateFilter =
+ substitutableNodeTemplate.getProperties().get(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME);
+ if (serviceTemplateFilter != null && serviceTemplateFilter instanceof Map) {
+ Object substituteServiceTemplate =
+ ((Map) serviceTemplateFilter).get(ToscaConstants.SUBSTITUTE_SERVICE_TEMPLATE_PROPERTY_NAME);
+ handleNoSubstituteServiceTemplate(substituteNodeTemplateId, substituteServiceTemplate);
+ return Optional.of(substituteServiceTemplate.toString());
+ }
+ }
+ throw new CoreException(new ToscaInvalidSubstituteNodeTemplatePropertiesErrorBuilder(substituteNodeTemplateId)
+ .build());
+ }
+
+ private void handleNoSubstituteServiceTemplate(String substituteNodeTemplateId, Object substituteServiceTemplate) {
+ if (substituteServiceTemplate == null) {
+ throw new CoreException(new ToscaInvalidSubstituteNodeTemplatePropertiesErrorBuilder(substituteNodeTemplateId)
+ .build());
+ }
+ }
+
+ @Override
+ public Map<String, NodeTemplate> getSubstitutableNodeTemplates(ServiceTemplate serviceTemplate) {
+ Map<String, NodeTemplate> substitutableNodeTemplates = new HashMap<>();
+
+ if (serviceTemplate == null || serviceTemplate.getTopology_template() == null
+ || serviceTemplate.getTopology_template().getNode_templates() == null) {
+ return substitutableNodeTemplates;
+ }
+
+ Map<String, NodeTemplate> nodeTemplates = serviceTemplate.getTopology_template().getNode_templates();
+ for (Map.Entry<String, NodeTemplate> entry : nodeTemplates.entrySet()) {
+ String nodeTemplateId = entry.getKey();
+ NodeTemplate nodeTemplate = entry.getValue();
+ if (isSubstitutableNodeTemplate(nodeTemplate)) {
+ substitutableNodeTemplates.put(nodeTemplateId, nodeTemplate);
+ }
+ }
+
+ return substitutableNodeTemplates;
+ }
+
+ @Override
+ public Optional<Map.Entry<String, NodeTemplate>> getSubstitutionMappedNodeTemplateByExposedReq(String substituteServiceTemplateFileName,
+ ServiceTemplate substituteServiceTemplate,
+ String requirementId) {
+ if (isSubstitutionServiceTemplate(substituteServiceTemplateFileName, substituteServiceTemplate)) {
+ Map<String, List<String>> substitutionMappingRequirements =
+ substituteServiceTemplate.getTopology_template().getSubstitution_mappings().getRequirements();
+ if (substitutionMappingRequirements != null) {
+ List<String> requirementMapping = substitutionMappingRequirements.get(requirementId);
+ if (requirementMapping != null && !requirementMapping.isEmpty()) {
+ String mappedNodeTemplateId = requirementMapping.get(0);
+ Optional<NodeTemplate> mappedNodeTemplate =
+ getNodeTemplateById(substituteServiceTemplate, mappedNodeTemplateId);
+ mappedNodeTemplate.orElseThrow(
+ () -> new CoreException(new ToscaInvalidEntryNotFoundErrorBuilder("Node Template",
+ mappedNodeTemplateId)
+ .build()));
+ Map.Entry<String, NodeTemplate> mappedNodeTemplateEntry = new Map.Entry<String, NodeTemplate>() {
+ @Override
+ public String getKey() {
+ return mappedNodeTemplateId;
+ }
+
+ @Override
+ public NodeTemplate getValue() {
+ return mappedNodeTemplate.get();
+ }
+
+ @Override
+ public NodeTemplate setValue(NodeTemplate value) {
+ return null;
+ }
+ };
+ return Optional.of(mappedNodeTemplateEntry);
+ }
+ }
+ }
+ return Optional.empty();
+ }
+
+ /*
+ match only for the input which is not null
*/
- @Override
- public Map<String, NodeTemplate> getNodeTemplatesByType(ServiceTemplate serviceTemplate,
- String nodeType,
- ToscaServiceModel toscaServiceModel) {
- Map<String, NodeTemplate> nodeTemplates = new HashMap<>();
-
- if (Objects.nonNull(serviceTemplate.getTopology_template())
- && MapUtils.isNotEmpty(serviceTemplate.getTopology_template().getNode_templates())) {
- for (Map.Entry<String, NodeTemplate> nodeTemplateEntry : serviceTemplate
- .getTopology_template().getNode_templates().entrySet()) {
- if (isTypeOf(nodeTemplateEntry.getValue(), nodeType, serviceTemplate, toscaServiceModel)) {
- nodeTemplates.put(nodeTemplateEntry.getKey(), nodeTemplateEntry.getValue());
- }
-
- }
- }
- return nodeTemplates;
- }
-
- @Override
- public Optional<NodeType> fetchNodeType(String nodeTypeKey, Collection<ServiceTemplate>
- serviceTemplates) {
- Optional<Map<String, NodeType>> nodeTypeMap = serviceTemplates.stream()
- .map(ServiceTemplate::getNode_types)
- .filter(nodeTypes -> Objects.nonNull(nodeTypes) && nodeTypes.containsKey(nodeTypeKey))
- .findFirst();
- return nodeTypeMap.map(stringNodeTypeMap -> stringNodeTypeMap.get(nodeTypeKey));
- }
-
- @Override
- public boolean isTypeOf(NodeTemplate nodeTemplate, String nodeType,
- ServiceTemplate serviceTemplate, ToscaServiceModel toscaServiceModel) {
- return isTypeOf(nodeTemplate, nodeType, GET_NODE_TYPE_METHOD_NAME, serviceTemplate,
- toscaServiceModel);
- }
-
- @Override
- public List<RequirementAssignment> getRequirements(NodeTemplate nodeTemplate,
- String requirementId) {
- List<RequirementAssignment> requirements = new ArrayList<>();
- List<Map<String, RequirementAssignment>> requirementList = nodeTemplate.getRequirements();
- if (requirementList != null) {
- requirementList.stream().filter(reqMap -> reqMap.get(requirementId) != null)
- .forEach(reqMap -> {
+ @Override
+ public boolean isDesiredRequirementAssignment(RequirementAssignment requirementAssignment, String capability,
+ String node, String relationship) {
+ if (isSameCapability(requirementAssignment, capability)) {
+ return false;
+ }
+
+ if (isSameRequirement(requirementAssignment, node)) {
+ return false;
+ }
+
+ if (isSameRelationship(requirementAssignment, relationship)) {
+ return false;
+ }
+
+ return !(capability == null && node == null && relationship == null);
+
+ }
+
+ private boolean isSameRelationship(RequirementAssignment requirementAssignment, String relationship) {
+ return relationship != null && (requirementAssignment.getRelationship() == null || !requirementAssignment
+ .getRelationship()
+ .equals(relationship));
+ }
+
+ private boolean isSameRequirement(RequirementAssignment requirementAssignment, String node) {
+ return node != null && (requirementAssignment.getNode() == null || !requirementAssignment.getNode()
+ .equals(node));
+ }
+
+ private boolean isSameCapability(RequirementAssignment requirementAssignment, String capability) {
+ return capability != null && (requirementAssignment.getCapability() == null || !requirementAssignment
+ .getCapability()
+ .equals(capability));
+ }
+
+ @Override
+ public ToscaFlatData getFlatEntity(ToscaElementTypes elementType, String typeId, ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaModel) {
+ ToscaFlatData flatData = new ToscaFlatData();
+ flatData.setElementType(elementType);
+
+ switch (elementType) {
+ case CAPABILITY_TYPE:
+ flatData.setFlatEntity(new CapabilityType());
+ break;
+ case NODE_TYPE:
+ flatData.setFlatEntity(new NodeType());
+ break;
+ case DATA_TYPE:
+ flatData.setFlatEntity(new DataType());
+ break;
+ default:
+ throw new RuntimeException("Entity[" + elementType + "] id[" + typeId + "] flat not supported");
+ }
+
+ boolean isEntityFound =
+ scanAnFlatEntity(elementType, typeId, flatData, serviceTemplate, toscaModel, new ArrayList<>(), 0);
+ if (!isEntityFound) {
+ throw new CoreException(new ToscaElementTypeNotFoundErrorBuilder(typeId).build());
+ }
+
+ return flatData;
+ }
+
+ @Override
+ public boolean isSubstitutableNodeTemplate(NodeTemplate nodeTemplate) {
+ return nodeTemplate.getDirectives() != null && nodeTemplate.getDirectives().contains(
+ ToscaConstants.NODE_TEMPLATE_DIRECTIVE_SUBSTITUTABLE);
+ }
+
+ private <T> Optional<Boolean> isTypeExistInServiceTemplateHierarchy(String typeToMatch, String typeToSearch,
+ String getTypesMethodName,
+ ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaServiceModel,
+ Set<String> analyzedImportFiles)
+ throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ Map<String, T> searchableTypes =
+ (Map<String, T>) serviceTemplate.getClass().getMethod(getTypesMethodName).invoke(serviceTemplate);
+
+ if (!MapUtils.isEmpty(searchableTypes)) {
+ T typeObject = searchableTypes.get(typeToSearch);
+ if (Objects.nonNull(typeObject)) {
+ String derivedFromTypeVal =
+ (String) typeObject.getClass().getMethod(GET_DERIVED_FROM_METHOD_NAME).invoke(typeObject);
+ if (Objects.equals(derivedFromTypeVal, typeToMatch)) {
+ return Optional.of(true);
+ } else if (Objects.isNull(derivedFromTypeVal) || isTypeIsToscaRoot(derivedFromTypeVal)) {
+ return Optional.of(false);
+ } else {
+ return isTypeExistInServiceTemplateHierarchy(typeToMatch, derivedFromTypeVal, getTypesMethodName,
+ serviceTemplate, toscaServiceModel, null);
+ }
+ } else {
+ return isTypeExistInImports(typeToMatch, typeToSearch, getTypesMethodName, serviceTemplate,
+ toscaServiceModel, analyzedImportFiles);
+ }
+ }
+ return isTypeExistInImports(typeToMatch, typeToSearch, getTypesMethodName, serviceTemplate, toscaServiceModel,
+ analyzedImportFiles);
+ }
+
+ private Optional<Boolean> isTypeExistInImports(String typeToMatch, String typeToSearch, String getTypesMethodName,
+ ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaServiceModel, Set<String> filesScanned)
+ throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+ List<Map<String, Import>> imports = serviceTemplate.getImports();
+ if (CollectionUtils.isEmpty(imports)) {
+ return Optional.empty();
+ }
+
+ Set<String> createdFilesScanned = createFilesScannedSet(filesScanned);
+
+ for (Map<String, Import> map : imports) {
ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
- RequirementAssignment reqAssignment = toscaExtensionYamlUtil
- .yamlToObject(toscaExtensionYamlUtil.objectToYaml(reqMap.get(requirementId)),
- RequirementAssignment.class);
- requirements.add(reqAssignment);
- });
- }
- return requirements;
- }
-
- @Override
- public Optional<NodeTemplate> getNodeTemplateById(ServiceTemplate serviceTemplate,
- String nodeTemplateId) {
- if ((serviceTemplate.getTopology_template() != null)
- && (serviceTemplate.getTopology_template().getNode_templates() != null)
- && (serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId)
- != null)) {
- return Optional
- .of(serviceTemplate.getTopology_template().getNode_templates().get(nodeTemplateId));
- }
- return Optional.empty();
- }
-
- @Override
- public Optional<String> getSubstituteServiceTemplateName(String substituteNodeTemplateId,
- NodeTemplate substitutableNodeTemplate) {
- if (!isSubstitutableNodeTemplate(substitutableNodeTemplate)) {
- return Optional.empty();
- }
-
- if (substitutableNodeTemplate.getProperties() != null
- && substitutableNodeTemplate.getProperties()
- .get(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME) != null) {
- Object serviceTemplateFilter = substitutableNodeTemplate.getProperties()
- .get(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME);
- if (serviceTemplateFilter != null && serviceTemplateFilter instanceof Map) {
- Object substituteServiceTemplate = ((Map) serviceTemplateFilter)
- .get(ToscaConstants.SUBSTITUTE_SERVICE_TEMPLATE_PROPERTY_NAME);
- handleNoSubstituteServiceTemplate(substituteNodeTemplateId, substituteServiceTemplate);
- return Optional.of(substituteServiceTemplate.toString());
- }
- }
- throw new CoreException(
- new ToscaInvalidSubstituteNodeTemplatePropertiesErrorBuilder(substituteNodeTemplateId)
- .build());
- }
-
- private void handleNoSubstituteServiceTemplate(String substituteNodeTemplateId,
- Object substituteServiceTemplate) {
- if (substituteServiceTemplate == null) {
- throw new CoreException(
- new ToscaInvalidSubstituteNodeTemplatePropertiesErrorBuilder(substituteNodeTemplateId)
- .build());
- }
- }
-
- @Override
- public Map<String, NodeTemplate> getSubstitutableNodeTemplates(ServiceTemplate serviceTemplate) {
- Map<String, NodeTemplate> substitutableNodeTemplates = new HashMap<>();
-
- if (serviceTemplate == null
- || serviceTemplate.getTopology_template() == null
- || serviceTemplate.getTopology_template().getNode_templates() == null) {
- return substitutableNodeTemplates;
- }
-
- Map<String, NodeTemplate> nodeTemplates =
- serviceTemplate.getTopology_template().getNode_templates();
- for (Map.Entry<String, NodeTemplate> entry : nodeTemplates.entrySet()) {
- String nodeTemplateId = entry.getKey();
- NodeTemplate nodeTemplate = entry.getValue();
- if (isSubstitutableNodeTemplate(nodeTemplate)) {
- substitutableNodeTemplates.put(nodeTemplateId, nodeTemplate);
- }
- }
-
- return substitutableNodeTemplates;
- }
-
- @Override
- public Optional<Map.Entry<String, NodeTemplate>> getSubstitutionMappedNodeTemplateByExposedReq(
- String substituteServiceTemplateFileName, ServiceTemplate substituteServiceTemplate,
- String requirementId) {
- if (isSubstitutionServiceTemplate(substituteServiceTemplateFileName,
- substituteServiceTemplate)) {
- Map<String, List<String>> substitutionMappingRequirements =
- substituteServiceTemplate.getTopology_template().getSubstitution_mappings()
- .getRequirements();
- if (substitutionMappingRequirements != null) {
- List<String> requirementMapping = substitutionMappingRequirements.get(requirementId);
- if (requirementMapping != null && !requirementMapping.isEmpty()) {
- String mappedNodeTemplateId = requirementMapping.get(0);
- Optional<NodeTemplate> mappedNodeTemplate =
- getNodeTemplateById(substituteServiceTemplate, mappedNodeTemplateId);
- mappedNodeTemplate.orElseThrow(() -> new CoreException(
- new ToscaInvalidEntryNotFoundErrorBuilder("Node Template", mappedNodeTemplateId)
- .build()));
- Map.Entry<String, NodeTemplate> mappedNodeTemplateEntry =
- new Map.Entry<String, NodeTemplate>() {
- @Override
- public String getKey() {
- return mappedNodeTemplateId;
+ Import anImport = toscaExtensionYamlUtil
+ .yamlToObject(toscaExtensionYamlUtil.objectToYaml(map.values().iterator().next()),
+ Import.class);
+ handleImportWithNoFileEntry(anImport);
+ String importFile = anImport.getFile();
+ ServiceTemplate template = toscaServiceModel.getServiceTemplates().get(fetchFileNameForImport(importFile,
+ serviceTemplate.getMetadata() == null ? null : serviceTemplate.getMetadata().get("filename")));
+ if (Objects.isNull(template) || createdFilesScanned
+ .contains(ToscaUtil.getServiceTemplateFileName(template))) {
+ continue;
+ } else {
+ createdFilesScanned.add(ToscaUtil.getServiceTemplateFileName(template));
+ }
+ Optional<Boolean> typeExistInServiceTemplateHierarchy =
+ isTypeExistInServiceTemplateHierarchy(typeToMatch, typeToSearch, getTypesMethodName, template,
+ toscaServiceModel, createdFilesScanned);
+ if (typeExistInServiceTemplateHierarchy.isPresent() && (typeExistInServiceTemplateHierarchy.get())) {
+ createdFilesScanned.clear();
+ return Optional.of(true);
+ }
+
+ }
+ return Optional.of(false);
+ }
+
+ private void handleImportWithNoFileEntry(Import anImport) {
+ if (Objects.isNull(anImport) || Objects.isNull(anImport.getFile())) {
+ throw new RuntimeException("import without file entry");
+ }
+ }
+
+ private Set<String> createFilesScannedSet(Set<String> filesScanned) {
+ Set<String> retFileScanned = filesScanned;
+ if (Objects.isNull(retFileScanned)) {
+ retFileScanned = new HashSet<>();
+ }
+ return retFileScanned;
+ }
+
+ private boolean isTypeIsToscaRoot(String type) {
+ return (type.contains(TOSCA_DOT) && type.contains(DOT_ROOT));
+ }
+
+ private boolean isSubstitutionServiceTemplate(String substituteServiceTemplateFileName,
+ ServiceTemplate substituteServiceTemplate) {
+ if (substituteServiceTemplate != null && substituteServiceTemplate.getTopology_template() != null
+ && substituteServiceTemplate.getTopology_template().getSubstitution_mappings() != null) {
+ if (substituteServiceTemplate.getTopology_template().getSubstitution_mappings().getNode_type() == null) {
+ throw new CoreException(new ToscaInvalidSubstitutionServiceTemplateErrorBuilder(substituteServiceTemplateFileName)
+ .build());
+ }
+ return true;
+ }
+ return false;
+
+ }
+
+ private boolean scanAnFlatEntity(ToscaElementTypes elementType, String typeId, ToscaFlatData flatData,
+ ServiceTemplate serviceTemplate, ToscaServiceModel toscaModel,
+ List<String> filesScanned, int rootScanStartInx) {
+
+
+ boolean entityFound =
+ enrichEntityFromCurrentServiceTemplate(elementType, typeId, flatData, serviceTemplate, toscaModel,
+ filesScanned, rootScanStartInx);
+ if (!entityFound) {
+ List<Map<String, Import>> imports = serviceTemplate.getImports();
+ if (CollectionUtils.isEmpty(imports)) {
+ return false;
+ }
+ boolean found = false;
+ for (Map<String, Import> importMap : imports) {
+ if (found) {
+ return true;
}
+ found = isFlatEntity(importMap, flatData, serviceTemplate, filesScanned, toscaModel, elementType,
+ typeId);
+ }
+ return found;
+ }
+ return true;
+ }
- @Override
- public NodeTemplate getValue() {
- return mappedNodeTemplate.get();
+ private boolean isFlatEntity(Map<String, Import> importMap, ToscaFlatData flatData, ServiceTemplate serviceTemplate,
+ List<String> filesScanned, ToscaServiceModel toscaModel,
+ ToscaElementTypes elementType, String typeId) {
+ boolean found = false;
+ ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
+ for (Object importObject : importMap.values()) {
+ Import importServiceTemplate = toscaExtensionYamlUtil
+ .yamlToObject(toscaExtensionYamlUtil.objectToYaml(importObject),
+ Import.class);
+ String fileName = fetchFileNameForImport(importServiceTemplate.getFile(),
+ serviceTemplate.getMetadata() == null ? null : serviceTemplate.getMetadata().get("filename"));
+ if (filesScanned.contains(fileName)) {
+ return false;
+ } else {
+ filesScanned.add(fileName);
+ }
+ ServiceTemplate template = toscaModel.getServiceTemplates().get(fileName);
+ if (Objects.isNull(template)) {
+ throw new CoreException(new ToscaFileNotFoundErrorBuilder(fileName).build());
+ }
+ found = scanAnFlatEntity(elementType, typeId, flatData, template, toscaModel, filesScanned,
+ filesScanned.size());
+ }
+ return found;
+ }
+
+ private String fetchFileNameForImport(String importServiceTemplateFile, String currentMetadatafileName) {
+ if (importServiceTemplateFile.contains("../")) {
+ return importServiceTemplateFile.replace("../", "");
+ } else if (currentMetadatafileName != null && currentMetadatafileName.indexOf('/') != -1) {
+ return currentMetadatafileName.substring(0, currentMetadatafileName.indexOf('/')) + "/"
+ + importServiceTemplateFile;
+ } else {
+ return importServiceTemplateFile;
+ }
+
+ }
+
+ private boolean enrichEntityFromCurrentServiceTemplate(ToscaElementTypes elementType, String typeId,
+ ToscaFlatData flatData,
+ ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaModel,
+ List<String> filesScanned, int rootScanStartInx) {
+ switch (elementType) {
+ case CAPABILITY_TYPE:
+ if (enrichCapabilityType(elementType, typeId, flatData, serviceTemplate, toscaModel, filesScanned,
+ rootScanStartInx)) {
+ return false;
+ }
+ break;
+ case NODE_TYPE:
+ if (enrichNodeTypeInfo(elementType, typeId, flatData, serviceTemplate, toscaModel, filesScanned,
+ rootScanStartInx)) {
+ return false;
+ }
+ break;
+ case DATA_TYPE:
+ if (enrichDataTypeInfo(elementType, typeId, flatData, serviceTemplate, toscaModel, filesScanned,
+ rootScanStartInx)) {
+ return false;
}
+ break;
+ default:
+ throw new RuntimeException("Entity[" + elementType + "] id[" + typeId + "] flat not supported");
+ }
+
+ return true;
+
+
+ }
+
+ private boolean enrichNodeTypeInfo(ToscaElementTypes elementType, String typeId, ToscaFlatData flatData,
+ ServiceTemplate serviceTemplate, ToscaServiceModel toscaModel,
+ List<String> filesScanned, int rootScanStartInx) {
+ String derivedFrom;
+ if (serviceTemplate.getNode_types() != null && serviceTemplate.getNode_types().containsKey(typeId)) {
- @Override
- public NodeTemplate setValue(NodeTemplate value) {
- return null;
+ filesScanned.clear();
+ flatData.addInheritanceHierarchyType(typeId);
+ NodeType targetNodeType = (NodeType) flatData.getFlatEntity();
+ NodeType sourceNodeType = serviceTemplate.getNode_types().get(typeId);
+ derivedFrom = sourceNodeType.getDerived_from();
+ if (derivedFrom != null) {
+ boolean isEntityFound =
+ scanAnFlatEntity(elementType, derivedFrom, flatData, serviceTemplate, toscaModel, filesScanned,
+ rootScanStartInx);
+ if (!isEntityFound) {
+ throw new CoreException(new ToscaElementTypeNotFoundErrorBuilder(typeId).build());
}
- };
- return Optional.of(mappedNodeTemplateEntry);
+ }
+ combineNodeTypeInfo(sourceNodeType, targetNodeType);
+ } else {
+ return true;
}
- }
+ return false;
}
- return Optional.empty();
- }
- /*
- match only for the input which is not null
- */
- @Override
- public boolean isDesiredRequirementAssignment(RequirementAssignment requirementAssignment,
- String capability, String node,
- String relationship) {
- if (isSameCapability(requirementAssignment, capability)) {
- return false;
- }
-
- if (isSameRequirement(requirementAssignment, node)) {
- return false;
- }
-
- if (isSameRelationship(requirementAssignment, relationship)) {
- return false;
- }
-
- return !(capability == null && node == null && relationship == null);
-
- }
-
- private boolean isSameRelationship(RequirementAssignment requirementAssignment,
- String relationship) {
- return relationship != null && (requirementAssignment.getRelationship() == null
- || !requirementAssignment.getRelationship().equals(relationship));
- }
-
- private boolean isSameRequirement(RequirementAssignment requirementAssignment, String node) {
- return node != null && (requirementAssignment.getNode() == null
- || !requirementAssignment.getNode().equals(node));
- }
-
- private boolean isSameCapability(RequirementAssignment requirementAssignment, String capability) {
- return capability != null && (requirementAssignment.getCapability() == null
- || !requirementAssignment.getCapability().equals(capability));
- }
-
- @Override
- public Object getFlatEntity(ToscaElementTypes elementType, String typeId,
- ServiceTemplate serviceTemplate, ToscaServiceModel toscaModel) {
- Object returnEntity;
-
- switch (elementType) {
- case CAPABILITY_TYPE:
- returnEntity = new CapabilityType();
- break;
- case NODE_TYPE:
- returnEntity = new NodeType();
- break;
- case DATA_TYPE:
- returnEntity = new DataType();
- break;
- default:
- throw new RuntimeException(
- "Entity[" + elementType + "] id[" + typeId + "] flat not supported");
- }
-
- boolean isEntityFound =
- scanAnFlatEntity(elementType, typeId, returnEntity, serviceTemplate, toscaModel,
- new ArrayList<>(), 0);
- if (!isEntityFound) {
- throw new CoreException(new ToscaElementTypeNotFoundErrorBuilder(typeId).build());
- }
-
- return returnEntity;
- }
-
- @Override
- public boolean isSubstitutableNodeTemplate(NodeTemplate nodeTemplate) {
- return nodeTemplate.getDirectives() != null
- && nodeTemplate.getDirectives().contains(ToscaConstants
- .NODE_TEMPLATE_DIRECTIVE_SUBSTITUTABLE);
- }
-
- private <T> Optional<Boolean> isTypeExistInServiceTemplateHierarchy(String typeToMatch,
- String typeToSearch,
- String getTypesMethodName,
- ServiceTemplate serviceTemplate,
- ToscaServiceModel toscaServiceModel,
- Set<String> analyzedImportFiles)
- throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
- Map<String, T> searchableTypes =
- (Map<String, T>) serviceTemplate.getClass().getMethod(getTypesMethodName)
- .invoke(serviceTemplate);
-
- if (!MapUtils.isEmpty(searchableTypes)) {
- T typeObject = searchableTypes.get(typeToSearch);
- if (Objects.nonNull(typeObject)) {
- String derivedFromTypeVal =
- (String) typeObject.getClass().getMethod(GET_DERIVED_FROM_METHOD_NAME).invoke(typeObject);
- if (Objects.equals(derivedFromTypeVal, typeToMatch)) {
- return Optional.of(true);
- } else if (Objects.isNull(derivedFromTypeVal) || isTypeIsToscaRoot(derivedFromTypeVal)) {
- return Optional.of(false);
+ private boolean enrichDataTypeInfo(ToscaElementTypes elementType, String typeId, ToscaFlatData flatData,
+ ServiceTemplate serviceTemplate, ToscaServiceModel toscaModel,
+ List<String> filesScanned, int rootScanStartInx) {
+ String derivedFrom;
+ if (serviceTemplate.getData_types() != null && serviceTemplate.getData_types().containsKey(typeId)) {
+
+ filesScanned.clear();
+ flatData.addInheritanceHierarchyType(typeId);
+ DataType targetDataType = (DataType) flatData.getFlatEntity();
+ DataType sourceDataType = serviceTemplate.getData_types().get(typeId);
+ derivedFrom = sourceDataType.getDerived_from();
+ if (derivedFrom != null) {
+ boolean isEntityFound =
+ scanAnFlatEntity(elementType, derivedFrom, flatData, serviceTemplate, toscaModel, filesScanned,
+ rootScanStartInx);
+ if (!isEntityFound) {
+ throw new CoreException(new ToscaElementTypeNotFoundErrorBuilder(typeId).build());
+ }
+ }
+ combineDataTypeInfo(sourceDataType, targetDataType);
} else {
- return isTypeExistInServiceTemplateHierarchy(typeToMatch,
- derivedFromTypeVal, getTypesMethodName, serviceTemplate, toscaServiceModel, null);
- }
- } else {
- return isTypeExistInImports(typeToMatch, typeToSearch, getTypesMethodName,
- serviceTemplate, toscaServiceModel, analyzedImportFiles);
- }
- }
- return isTypeExistInImports(typeToMatch, typeToSearch, getTypesMethodName, serviceTemplate,
- toscaServiceModel, analyzedImportFiles);
- }
-
- private Optional<Boolean> isTypeExistInImports(String typeToMatch,
- String typeToSearch,
- String getTypesMethodName,
- ServiceTemplate serviceTemplate,
- ToscaServiceModel toscaServiceModel,
- Set<String> filesScanned)
- throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
- List<Map<String, Import>> imports = serviceTemplate.getImports();
- if (CollectionUtils.isEmpty(imports)) {
- return Optional.empty();
- }
-
- Set<String> createdFilesScanned = createFilesScannedSet(filesScanned);
-
- for (Map<String, Import> map : imports) {
- ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
- Import anImport = toscaExtensionYamlUtil
- .yamlToObject(toscaExtensionYamlUtil.objectToYaml(map.values().iterator().next()),
- Import.class);
- handleImportWithNoFileEntry(anImport);
- String importFile = anImport.getFile();
- ServiceTemplate template =
- toscaServiceModel.getServiceTemplates().get(fetchFileNameForImport(importFile,
- serviceTemplate.getMetadata() == null ? null
- : serviceTemplate.getMetadata().get("filename")));
- if (Objects.isNull(template)
- || createdFilesScanned.contains(ToscaUtil.getServiceTemplateFileName(template))) {
- continue;
- } else {
- createdFilesScanned.add(ToscaUtil.getServiceTemplateFileName(template));
- }
- Optional<Boolean> typeExistInServiceTemplateHierarchy =
- isTypeExistInServiceTemplateHierarchy(typeToMatch, typeToSearch, getTypesMethodName,
- template, toscaServiceModel, createdFilesScanned);
- if (typeExistInServiceTemplateHierarchy.isPresent()
- && (typeExistInServiceTemplateHierarchy.get())) {
- createdFilesScanned.clear();
- return Optional.of(true);
- }
-
- }
- return Optional.of(false);
- }
-
- private void handleImportWithNoFileEntry(Import anImport) {
- if (Objects.isNull(anImport) || Objects.isNull(anImport.getFile())) {
- throw new RuntimeException("import without file entry");
- }
- }
-
- private Set<String> createFilesScannedSet(Set<String> filesScanned) {
- Set<String> retFileScanned = filesScanned;
- if (Objects.isNull(retFileScanned)) {
- retFileScanned = new HashSet<>();
- }
- return retFileScanned;
- }
-
- private boolean isTypeIsToscaRoot(String type) {
- return (type.contains(TOSCA_DOT) && type.contains(DOT_ROOT));
- }
-
- private boolean isSubstitutionServiceTemplate(String substituteServiceTemplateFileName,
- ServiceTemplate substituteServiceTemplate) {
- if (substituteServiceTemplate != null
- && substituteServiceTemplate.getTopology_template() != null
- && substituteServiceTemplate.getTopology_template().getSubstitution_mappings() != null) {
- if (substituteServiceTemplate.getTopology_template().getSubstitution_mappings()
- .getNode_type() == null) {
- throw new CoreException(new ToscaInvalidSubstitutionServiceTemplateErrorBuilder(
- substituteServiceTemplateFileName).build());
- }
- return true;
- }
- return false;
-
- }
-
- private boolean scanAnFlatEntity(ToscaElementTypes elementType, String typeId, Object entity,
- ServiceTemplate serviceTemplate, ToscaServiceModel toscaModel,
- List<String> filesScanned, int rootScanStartInx) {
-
-
- boolean entityFound = enrichEntityFromCurrentServiceTemplate(elementType, typeId, entity,
- serviceTemplate, toscaModel, filesScanned, rootScanStartInx);
- if (!entityFound) {
- List<Map<String, Import>> imports = serviceTemplate.getImports();
- if (CollectionUtils.isEmpty(imports)) {
+ return true;
+ }
return false;
- }
- boolean found = false;
- for (Map<String, Import> importMap : imports) {
- if (found) {
- return true;
- }
- found = isFlatEntity(importMap, entity, serviceTemplate, filesScanned,
- toscaModel, elementType, typeId);
- }
- return found;
- }
- return true;
- }
-
- private boolean isFlatEntity(Map<String, Import> importMap,
- Object entity,
- ServiceTemplate serviceTemplate,
- List<String> filesScanned,
- ToscaServiceModel toscaModel,
- ToscaElementTypes elementType, String typeId) {
- boolean found = false;
- ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
- for (Object importObject : importMap.values()) {
- Import importServiceTemplate = toscaExtensionYamlUtil
- .yamlToObject(toscaExtensionYamlUtil.objectToYaml(importObject), Import.class);
- String fileName = fetchFileNameForImport(importServiceTemplate.getFile(),
- serviceTemplate.getMetadata() == null ? null : serviceTemplate.getMetadata().get(
- "filename"));
- if (filesScanned.contains(fileName)) {
+ }
+
+ private boolean enrichCapabilityType(ToscaElementTypes elementType, String typeId, ToscaFlatData flatData,
+ ServiceTemplate serviceTemplate, ToscaServiceModel toscaModel,
+ List<String> filesScanned, int rootScanStartInx) {
+ String derivedFrom;
+ if (serviceTemplate.getCapability_types() != null && serviceTemplate.getCapability_types()
+ .containsKey(typeId)) {
+
+ filesScanned.clear();
+ flatData.addInheritanceHierarchyType(typeId);
+ CapabilityType targetCapabilityType = (CapabilityType) flatData.getFlatEntity();
+ CapabilityType sourceCapabilityType = serviceTemplate.getCapability_types().get(typeId);
+ derivedFrom = sourceCapabilityType.getDerived_from();
+ if (derivedFrom != null) {
+ boolean isEntityFound =
+ scanAnFlatEntity(elementType, derivedFrom, flatData, serviceTemplate, toscaModel, filesScanned,
+ rootScanStartInx);
+ if (!isEntityFound) {
+ throw new CoreException(new ToscaElementTypeNotFoundErrorBuilder(typeId).build());
+ }
+ }
+ combineCapabilityTypeInfo(sourceCapabilityType, targetCapabilityType);
+ } else {
+ return true;
+ }
return false;
- } else {
- filesScanned.add(fileName);
- }
- ServiceTemplate template = toscaModel.getServiceTemplates().get(fileName);
- if (Objects.isNull(template)) {
- throw new CoreException(
- new ToscaFileNotFoundErrorBuilder(fileName).build());
- }
- found = scanAnFlatEntity(elementType, typeId, entity, template, toscaModel,
- filesScanned, filesScanned.size());
- }
- return found;
- }
-
- private String fetchFileNameForImport(String importServiceTemplateFile,
- String currentMetadatafileName) {
- if (importServiceTemplateFile.contains("../")) {
- return importServiceTemplateFile.replace("../", "");
- } else if (currentMetadatafileName != null) {
- return currentMetadatafileName.substring(0, currentMetadatafileName.indexOf('/')) + "/"
- + importServiceTemplateFile;
- } else {
- return importServiceTemplateFile;
- }
-
- }
-
- private boolean enrichEntityFromCurrentServiceTemplate(ToscaElementTypes elementType,
- String typeId, Object entity,
- ServiceTemplate serviceTemplate,
- ToscaServiceModel toscaModel,
- List<String> filesScanned,
- int rootScanStartInx) {
- switch (elementType) {
- case CAPABILITY_TYPE:
- if (enrichCapabilityType(elementType, typeId, entity, serviceTemplate, toscaModel,
- filesScanned, rootScanStartInx)) {
- return false;
- }
- break;
- case NODE_TYPE:
- if (enrichNodeTypeInfo(elementType, typeId, entity, serviceTemplate, toscaModel,
- filesScanned, rootScanStartInx)) {
- return false;
- }
- break;
- case DATA_TYPE:
- if (enrichDataTypeInfo(elementType, typeId, entity, serviceTemplate, toscaModel,
- filesScanned, rootScanStartInx)) {
- return false;
- }
- break;
- default:
- throw new RuntimeException(
- "Entity[" + elementType + "] id[" + typeId + "] flat not supported");
- }
-
- return true;
-
-
- }
-
- private boolean enrichNodeTypeInfo(ToscaElementTypes elementType, String typeId, Object entity,
- ServiceTemplate serviceTemplate, ToscaServiceModel toscaModel,
- List<String> filesScanned, int rootScanStartInx) {
- String derivedFrom;
- if (serviceTemplate.getNode_types() != null
- && serviceTemplate.getNode_types().containsKey(typeId)) {
-
- filesScanned.clear();
- NodeType targetNodeType = (NodeType) entity;
- NodeType sourceNodeType = serviceTemplate.getNode_types().get(typeId);
- derivedFrom = sourceNodeType.getDerived_from();
- if (derivedFrom != null) {
- scanAnFlatEntity(elementType, derivedFrom, entity, serviceTemplate, toscaModel,
- filesScanned, rootScanStartInx);
- }
- combineNodeTypeInfo(sourceNodeType, targetNodeType);
- } else {
- return true;
- }
- return false;
- }
-
- private boolean enrichDataTypeInfo(ToscaElementTypes elementType, String typeId, Object entity,
- ServiceTemplate serviceTemplate, ToscaServiceModel toscaModel,
- List<String> filesScanned, int rootScanStartInx) {
- String derivedFrom;
- if (serviceTemplate.getData_types() != null
- && serviceTemplate.getData_types().containsKey(typeId)) {
-
- filesScanned.clear();
- DataType targetDataType = (DataType) entity;
- DataType sourceDataType = serviceTemplate.getData_types().get(typeId);
- derivedFrom = sourceDataType.getDerived_from();
- if (derivedFrom != null) {
- scanAnFlatEntity(elementType, derivedFrom, entity, serviceTemplate, toscaModel,
- filesScanned, rootScanStartInx);
- }
- combineDataTypeInfo(sourceDataType, targetDataType);
- } else {
- return true;
- }
- return false;
- }
-
- private boolean enrichCapabilityType(ToscaElementTypes elementType, String typeId, Object entity,
- ServiceTemplate serviceTemplate,
- ToscaServiceModel toscaModel, List<String> filesScanned,
- int rootScanStartInx) {
- String derivedFrom;
- if (serviceTemplate.getCapability_types() != null
- && serviceTemplate.getCapability_types().containsKey(typeId)) {
-
- filesScanned.clear();
- CapabilityType targetCapabilityType = (CapabilityType) entity;
- CapabilityType sourceCapabilityType = serviceTemplate.getCapability_types().get(typeId);
- derivedFrom = sourceCapabilityType.getDerived_from();
- if (derivedFrom != null) {
- scanAnFlatEntity(elementType, derivedFrom, entity, serviceTemplate, toscaModel,
- filesScanned, rootScanStartInx);
- }
- combineCapabilityTypeInfo(sourceCapabilityType, targetCapabilityType);
- } else {
- return true;
- }
- return false;
- }
-
- private void combineNodeTypeInfo(NodeType sourceNodeType, NodeType targetNodeType) {
- targetNodeType.setDerived_from(sourceNodeType.getDerived_from());
- targetNodeType.setDescription(sourceNodeType.getDescription());
- targetNodeType.setVersion(sourceNodeType.getVersion());
- targetNodeType.setProperties(
- CommonMethods.mergeMaps(targetNodeType.getProperties(), sourceNodeType.getProperties()));
- targetNodeType.setInterfaces(
- CommonMethods.mergeMaps(targetNodeType.getInterfaces(), sourceNodeType.getInterfaces()));
- targetNodeType.setArtifacts(
- CommonMethods.mergeMaps(targetNodeType.getArtifacts(), sourceNodeType.getArtifacts()));
- targetNodeType.setAttributes(
- CommonMethods.mergeMaps(targetNodeType.getAttributes(), sourceNodeType.getAttributes()));
- targetNodeType.setCapabilities(CommonMethods
- .mergeMaps(targetNodeType.getCapabilities(), sourceNodeType.getCapabilities()));
- targetNodeType.setRequirements(CommonMethods
- .mergeListsOfMap(targetNodeType.getRequirements(), sourceNodeType.getRequirements()));
-
- }
-
- private void combineDataTypeInfo(DataType sourceDataType, DataType targetDataType) {
- targetDataType.setDerived_from(sourceDataType.getDerived_from());
- targetDataType.setDescription(sourceDataType.getDescription());
- targetDataType.setVersion(sourceDataType.getVersion());
- targetDataType.setProperties(
- CommonMethods.mergeMaps(targetDataType.getProperties(), sourceDataType.getProperties()));
- targetDataType.setConstraints(
- CommonMethods.mergeLists(targetDataType.getConstraints(), sourceDataType.getConstraints()));
- }
-
-
- private void combineCapabilityTypeInfo(CapabilityType sourceCapabilityType,
- CapabilityType targetCapabilityType) {
-
- targetCapabilityType.setAttributes(CommonMethods
- .mergeMaps(targetCapabilityType.getAttributes(), sourceCapabilityType.getAttributes()));
- targetCapabilityType.setProperties(CommonMethods
- .mergeMaps(targetCapabilityType.getProperties(), sourceCapabilityType.getProperties()));
- targetCapabilityType.setValid_source_types(CommonMethods
- .mergeLists(targetCapabilityType.getValid_source_types(),
- sourceCapabilityType.getValid_source_types()));
-
- if (StringUtils.isNotEmpty(sourceCapabilityType.getDerived_from())) {
- targetCapabilityType.setDerived_from(sourceCapabilityType.getDerived_from());
- }
- if (StringUtils.isNotEmpty(sourceCapabilityType.getDescription())) {
- targetCapabilityType.setDescription(sourceCapabilityType.getDescription());
- }
- if (StringUtils.isNotEmpty(sourceCapabilityType.getVersion())) {
- targetCapabilityType.setVersion(sourceCapabilityType.getVersion());
- }
-
-
- }
-
-
- /*
- * Create node type according to the input substitution service template, while the substitution
- * service template can be mappted to this node type, for substitution mapping.
- *
- * @param substitutionServiceTemplate substitution serivce template
- * @param nodeTypeDerivedFromValue derived from value for the created node type
- * @return the node type
- */
- @Override
- public NodeType createInitSubstitutionNodeType(ServiceTemplate substitutionServiceTemplate,
- String nodeTypeDerivedFromValue) {
- NodeType substitutionNodeType = new NodeType();
- substitutionNodeType.setDerived_from(nodeTypeDerivedFromValue);
- substitutionNodeType.setDescription(substitutionServiceTemplate.getDescription());
- substitutionNodeType
- .setProperties(manageSubstitutionNodeTypeProperties(substitutionServiceTemplate));
- substitutionNodeType
- .setAttributes(manageSubstitutionNodeTypeAttributes(substitutionServiceTemplate));
- return substitutionNodeType;
- }
-
- @Override
- public Map<String, PropertyDefinition> manageSubstitutionNodeTypeProperties(
- ServiceTemplate substitutionServiceTemplate) {
- Map<String, PropertyDefinition> substitutionNodeTypeProperties = new HashMap<>();
- Map<String, ParameterDefinition> properties =
- substitutionServiceTemplate.getTopology_template().getInputs();
- if (properties == null) {
- return null;
- }
-
- PropertyDefinition propertyDefinition;
- String toscaPropertyName;
- for (Map.Entry<String, ParameterDefinition> entry : properties.entrySet()) {
- toscaPropertyName = entry.getKey();
- propertyDefinition = new PropertyDefinition();
- ParameterDefinition parameterDefinition =
- substitutionServiceTemplate.getTopology_template().getInputs().get(toscaPropertyName);
- propertyDefinition.setType(parameterDefinition.getType());
- propertyDefinition.setDescription(parameterDefinition.getDescription());
- propertyDefinition.set_default(parameterDefinition.get_default());
- if (parameterDefinition.getRequired() != null) {
- propertyDefinition.setRequired(parameterDefinition.getRequired());
- }
- if (propertyDefinition.get_default() != null) {
- propertyDefinition.setRequired(false);
- }
- if (!CollectionUtils.isEmpty(parameterDefinition.getConstraints())) {
- propertyDefinition.setConstraints(parameterDefinition.getConstraints());
- }
- propertyDefinition.setEntry_schema(parameterDefinition.getEntry_schema());
- if (parameterDefinition.getStatus() != null) {
- propertyDefinition.setStatus(parameterDefinition.getStatus());
- }
- substitutionNodeTypeProperties.put(toscaPropertyName, propertyDefinition);
- }
- return substitutionNodeTypeProperties;
- }
-
-
- private Map<String, AttributeDefinition> manageSubstitutionNodeTypeAttributes(
- ServiceTemplate substitutionServiceTemplate) {
- Map<String, AttributeDefinition> substitutionNodeTypeAttributes = new HashMap<>();
- Map<String, ParameterDefinition> attributes =
- substitutionServiceTemplate.getTopology_template().getOutputs();
- if (attributes == null) {
- return null;
- }
- AttributeDefinition attributeDefinition;
- String toscaAttributeName;
-
- for (Map.Entry<String, ParameterDefinition> entry : attributes.entrySet()) {
- attributeDefinition = new AttributeDefinition();
- toscaAttributeName = entry.getKey();
- ParameterDefinition parameterDefinition =
- substitutionServiceTemplate.getTopology_template().getOutputs().get(toscaAttributeName);
- if (parameterDefinition.getType() != null && !parameterDefinition.getType().isEmpty()) {
- attributeDefinition.setType(parameterDefinition.getType());
- } else {
- attributeDefinition.setType(PropertyType.STRING.getDisplayName());
- }
- attributeDefinition.setDescription(parameterDefinition.getDescription());
- attributeDefinition.set_default(parameterDefinition.get_default());
- attributeDefinition.setEntry_schema(parameterDefinition.getEntry_schema());
- if (Objects.nonNull(parameterDefinition.getStatus())) {
- attributeDefinition.setStatus(parameterDefinition.getStatus());
- }
- substitutionNodeTypeAttributes.put(toscaAttributeName, attributeDefinition);
- }
- return substitutionNodeTypeAttributes;
- }
-
- /**
- * Checks if the requirement exists in the node template.
+ }
+
+ private void combineNodeTypeInfo(NodeType sourceNodeType, NodeType targetNodeType) {
+ targetNodeType.setDerived_from(sourceNodeType.getDerived_from());
+ targetNodeType.setDescription(sourceNodeType.getDescription());
+ targetNodeType.setVersion(sourceNodeType.getVersion());
+ targetNodeType
+ .setProperties(CommonMethods.mergeMaps(targetNodeType.getProperties(), sourceNodeType.getProperties()));
+ combineNodeTypeInterfaceInfo(sourceNodeType, targetNodeType);
+ targetNodeType
+ .setArtifacts(CommonMethods.mergeMaps(targetNodeType.getArtifacts(), sourceNodeType.getArtifacts()));
+ targetNodeType
+ .setAttributes(CommonMethods.mergeMaps(targetNodeType.getAttributes(), sourceNodeType.getAttributes()));
+ targetNodeType.setCapabilities(
+ CommonMethods.mergeMaps(targetNodeType.getCapabilities(), sourceNodeType.getCapabilities()));
+ targetNodeType.setRequirements(
+ CommonMethods.mergeListsOfMap(targetNodeType.getRequirements(), sourceNodeType.getRequirements()));
+
+ }
+
+ private InterfaceDefinitionType getInterfaceDefinitionType(String interfaceName, Object interfaceDefTypeObj) {
+ Optional<InterfaceDefinitionType> interfaceDefinitionType = DataModelUtil.convertObjToInterfaceDefinition(
+ interfaceName, interfaceDefTypeObj, InterfaceDefinitionType.class);
+ if (!interfaceDefinitionType.isPresent()) {
+ throw new CoreException(new CreateInterfaceObjectErrorBuilder("InterfaceDefinitionType", interfaceName,
+ "Invalid interface object").build());
+ }
+ return interfaceDefinitionType.get();
+ }
+
+ private void combineNodeTypeInterfaceInfo(NodeType sourceNodeType, NodeType targetNodeType) {
+ Optional<Map<String, Object>> interfaceNoMerge = combineInterfaceNoMerge(sourceNodeType, targetNodeType);
+ if (interfaceNoMerge.isPresent()) {
+ targetNodeType.setInterfaces(interfaceNoMerge.get());
+ return;
+ }
+ targetNodeType.setInterfaces(combineInterfaces(sourceNodeType, targetNodeType));
+ }
+
+ private Map<String, Object> combineInterfaces(NodeType sourceNodeType, NodeType targetNodeType) {
+ Map<String, Object> combineInterfaces = new HashMap<>();
+ for (Map.Entry<String, Object> sourceInterfaceDefEntry : sourceNodeType.getInterfaces().entrySet()) {
+ String interfaceName = sourceInterfaceDefEntry.getKey();
+ if (!MapUtils.isEmpty(targetNodeType.getInterfaces()) && targetNodeType.getInterfaces()
+ .containsKey(interfaceName)) {
+ combineInterfaces.put(interfaceName,
+ combineInterfaceDefinition(interfaceName, sourceInterfaceDefEntry.getValue(),
+ targetNodeType.getInterfaces().get(interfaceName)));
+ } else {
+ combineInterfaces.put(sourceInterfaceDefEntry.getKey(), sourceInterfaceDefEntry.getValue());
+ }
+ }
+
+ for (Map.Entry<String, Object> targetInterfaceDefEntry : targetNodeType.getInterfaces().entrySet()) {
+ String interfaceName = targetInterfaceDefEntry.getKey();
+ if (!sourceNodeType.getInterfaces().containsKey(interfaceName)) {
+ combineInterfaces.put(targetInterfaceDefEntry.getKey(), targetInterfaceDefEntry.getValue());
+ }
+ }
+
+ return combineInterfaces;
+ }
+
+ private Optional<Map<String, Object>> combineInterfaceNoMerge(NodeType sourceNodeType, NodeType targetNodeType) {
+ if ((MapUtils.isEmpty(sourceNodeType.getInterfaces()) && MapUtils.isEmpty(targetNodeType.getInterfaces()))) {
+ return Optional.empty();
+ }
+
+ if (MapUtils.isEmpty(sourceNodeType.getInterfaces()) && !MapUtils.isEmpty(targetNodeType.getInterfaces())) {
+ return Optional.of(targetNodeType.getInterfaces());
+ }
+
+ if (!MapUtils.isEmpty(sourceNodeType.getInterfaces()) && MapUtils.isEmpty(targetNodeType.getInterfaces())) {
+ return Optional.of(sourceNodeType.getInterfaces());
+ }
+ return Optional.empty();
+
+ }
+
+ private Object combineInterfaceDefinition(String interfaceName, Object sourceInterfaceDefType,
+ Object targetInterfaceDefType) {
+ InterfaceDefinitionType sourceInterface = getInterfaceDefinitionType(interfaceName, sourceInterfaceDefType);
+ InterfaceDefinitionType targetInterface = getInterfaceDefinitionType(interfaceName, targetInterfaceDefType);
+ InterfaceDefinitionType combineInterface = new InterfaceDefinitionType();
+ combineInterface.setType(sourceInterface.getType());
+ combineInterface.setInputs(CommonMethods.mergeMaps(targetInterface.getInputs(), sourceInterface.getInputs()));
+ combineInterface.setOperations(
+ CommonMethods.mergeMaps(targetInterface.getOperations(), sourceInterface.getOperations()));
+
+ return DataModelUtil.convertInterfaceDefinitionTypeToObj(combineInterface).get();
+ }
+
+ private void combineDataTypeInfo(DataType sourceDataType, DataType targetDataType) {
+ targetDataType.setDerived_from(sourceDataType.getDerived_from());
+ targetDataType.setDescription(sourceDataType.getDescription());
+ targetDataType.setVersion(sourceDataType.getVersion());
+ targetDataType
+ .setProperties(CommonMethods.mergeMaps(targetDataType.getProperties(), sourceDataType.getProperties()));
+ targetDataType.setConstraints(
+ CommonMethods.mergeLists(targetDataType.getConstraints(), sourceDataType.getConstraints()));
+ }
+
+
+ private void combineCapabilityTypeInfo(CapabilityType sourceCapabilityType, CapabilityType targetCapabilityType) {
+
+ targetCapabilityType.setAttributes(
+ CommonMethods.mergeMaps(targetCapabilityType.getAttributes(), sourceCapabilityType.getAttributes()));
+ targetCapabilityType.setProperties(
+ CommonMethods.mergeMaps(targetCapabilityType.getProperties(), sourceCapabilityType.getProperties()));
+ targetCapabilityType.setValid_source_types(CommonMethods
+ .mergeLists(targetCapabilityType.getValid_source_types(),
+ sourceCapabilityType.getValid_source_types()));
+
+ if (StringUtils.isNotEmpty(sourceCapabilityType.getDerived_from())) {
+ targetCapabilityType.setDerived_from(sourceCapabilityType.getDerived_from());
+ }
+ if (StringUtils.isNotEmpty(sourceCapabilityType.getDescription())) {
+ targetCapabilityType.setDescription(sourceCapabilityType.getDescription());
+ }
+ if (StringUtils.isNotEmpty(sourceCapabilityType.getVersion())) {
+ targetCapabilityType.setVersion(sourceCapabilityType.getVersion());
+ }
+
+
+ }
+
+
+ /*
+ * Create node type according to the input substitution service template, while the substitution
+ * service template can be mappted to this node type, for substitution mapping.
*
- * @param nodeTemplate the node template
- * @param requirementId the requirement id
- * @param requirementAssignment the requirement assignment
- * @return true if the requirement already exists and false otherwise
+ * @param substitutionServiceTemplate substitution serivce template
+ * @param nodeTypeDerivedFromValue derived from value for the created node type
+ * @return the node type
*/
- @Override
- public boolean isRequirementExistInNodeTemplate(NodeTemplate nodeTemplate,
- String requirementId,
- RequirementAssignment requirementAssignment) {
- List<Map<String, RequirementAssignment>> nodeTemplateRequirements = nodeTemplate
- .getRequirements();
- return nodeTemplateRequirements != null && nodeTemplateRequirements.stream().anyMatch(
- requirement -> requirement.containsKey(requirementId) && DataModelUtil
- .compareRequirementAssignment(requirementAssignment, requirement.get(requirementId)));
- }
-
- @Override
- public boolean isTypeOf(InterfaceDefinitionType interfaceDefinition, String interfaceType,
- ServiceTemplate serviceTemplate, ToscaServiceModel toscaServiceModel) {
- return isTypeOf(interfaceDefinition, interfaceType, GET_INTERFACE_TYPE_METHOD_NAME, serviceTemplate,
- toscaServiceModel);
- }
-
- @Override
- public boolean isTypeOf(DefinitionOfDataType parameterDefinition, String dataType,
- ServiceTemplate serviceTemplate, ToscaServiceModel toscaServiceModel) {
- return isTypeOf(parameterDefinition, dataType, GET_DATA_TYPE_METHOD_NAME, serviceTemplate,
- toscaServiceModel);
- }
-
- private <T> boolean isTypeOf(T object, String type, String getTypesMethodName,
- ServiceTemplate serviceTemplate,
- ToscaServiceModel toscaServiceModel) {
- if (object == null) {
- return false;
- }
-
- try {
- String objectType = (String) object.getClass().getMethod(GET_TYPE_METHOD_NAME).invoke(object);
- if (Objects.equals(objectType, type)) {
- return true;
- }
+ @Override
+ public NodeType createInitSubstitutionNodeType(ServiceTemplate substitutionServiceTemplate,
+ String nodeTypeDerivedFromValue) {
+ NodeType substitutionNodeType = new NodeType();
+ substitutionNodeType.setDerived_from(nodeTypeDerivedFromValue);
+ substitutionNodeType.setDescription(substitutionServiceTemplate.getDescription());
+ substitutionNodeType.setProperties(manageSubstitutionNodeTypeProperties(substitutionServiceTemplate));
+ substitutionNodeType.setAttributes(manageSubstitutionNodeTypeAttributes(substitutionServiceTemplate));
+ return substitutionNodeType;
+ }
+
+ @Override
+ public Map<String, PropertyDefinition> manageSubstitutionNodeTypeProperties(ServiceTemplate substitutionServiceTemplate) {
+ Map<String, PropertyDefinition> substitutionNodeTypeProperties = new HashMap<>();
+ Map<String, ParameterDefinition> properties = substitutionServiceTemplate.getTopology_template().getInputs();
+ if (properties == null) {
+ return null;
+ }
+
+ PropertyDefinition propertyDefinition;
+ String toscaPropertyName;
+ for (Map.Entry<String, ParameterDefinition> entry : properties.entrySet()) {
+ toscaPropertyName = entry.getKey();
+ propertyDefinition = new PropertyDefinition();
+ ParameterDefinition parameterDefinition =
+ substitutionServiceTemplate.getTopology_template().getInputs().get(toscaPropertyName);
+ propertyDefinition.setType(parameterDefinition.getType());
+ propertyDefinition.setDescription(parameterDefinition.getDescription());
+ propertyDefinition.set_default(parameterDefinition.get_default());
+ if (parameterDefinition.getRequired() != null) {
+ propertyDefinition.setRequired(parameterDefinition.getRequired());
+ }
+ if (propertyDefinition.get_default() != null) {
+ propertyDefinition.setRequired(false);
+ }
+ if (!CollectionUtils.isEmpty(parameterDefinition.getConstraints())) {
+ propertyDefinition.setConstraints(parameterDefinition.getConstraints());
+ }
+ propertyDefinition.setEntry_schema(parameterDefinition.getEntry_schema());
+ if (parameterDefinition.getStatus() != null) {
+ propertyDefinition.setStatus(parameterDefinition.getStatus());
+ }
+ substitutionNodeTypeProperties.put(toscaPropertyName, propertyDefinition);
+ }
+ return substitutionNodeTypeProperties;
+ }
+
+
+ private Map<String, AttributeDefinition> manageSubstitutionNodeTypeAttributes(ServiceTemplate substitutionServiceTemplate) {
+ Map<String, AttributeDefinition> substitutionNodeTypeAttributes = new HashMap<>();
+ Map<String, ParameterDefinition> attributes = substitutionServiceTemplate.getTopology_template().getOutputs();
+ if (attributes == null) {
+ return null;
+ }
+ AttributeDefinition attributeDefinition;
+ String toscaAttributeName;
+
+ for (Map.Entry<String, ParameterDefinition> entry : attributes.entrySet()) {
+ attributeDefinition = new AttributeDefinition();
+ toscaAttributeName = entry.getKey();
+ ParameterDefinition parameterDefinition =
+ substitutionServiceTemplate.getTopology_template().getOutputs().get(toscaAttributeName);
+ if (parameterDefinition.getType() != null && !parameterDefinition.getType().isEmpty()) {
+ attributeDefinition.setType(parameterDefinition.getType());
+ } else {
+ attributeDefinition.setType(PropertyType.STRING.getDisplayName());
+ }
+ attributeDefinition.setDescription(parameterDefinition.getDescription());
+ attributeDefinition.set_default(parameterDefinition.get_default());
+ attributeDefinition.setEntry_schema(parameterDefinition.getEntry_schema());
+ if (Objects.nonNull(parameterDefinition.getStatus())) {
+ attributeDefinition.setStatus(parameterDefinition.getStatus());
+ }
+ substitutionNodeTypeAttributes.put(toscaAttributeName, attributeDefinition);
+ }
+ return substitutionNodeTypeAttributes;
+ }
- Optional<Boolean> typeExistInServiceTemplateHierarchy =
- isTypeExistInServiceTemplateHierarchy(type, objectType, getTypesMethodName,
- serviceTemplate, toscaServiceModel, null);
- return typeExistInServiceTemplateHierarchy.orElseThrow(() -> new CoreException(
- new ToscaElementTypeNotFoundErrorBuilder(objectType).build()));
+ /**
+ * Checks if the requirement exists in the node template.
+ *
+ * @param nodeTemplate the node template
+ * @param requirementId the requirement id
+ * @param requirementAssignment the requirement assignment
+ * @return true if the requirement already exists and false otherwise
+ */
+ @Override
+ public boolean isRequirementExistInNodeTemplate(NodeTemplate nodeTemplate, String requirementId,
+ RequirementAssignment requirementAssignment) {
+ List<Map<String, RequirementAssignment>> nodeTemplateRequirements = nodeTemplate.getRequirements();
+ return nodeTemplateRequirements != null && nodeTemplateRequirements.stream().anyMatch(
+ requirement -> requirement.containsKey(requirementId) && DataModelUtil.compareRequirementAssignment(
+ requirementAssignment, requirement.get(requirementId)));
+ }
+
+ @Override
+ public boolean isTypeOf(InterfaceDefinitionType interfaceDefinition, String interfaceType,
+ ServiceTemplate serviceTemplate, ToscaServiceModel toscaServiceModel) {
+ return isTypeOf(interfaceDefinition, interfaceType, GET_INTERFACE_TYPE_METHOD_NAME, serviceTemplate,
+ toscaServiceModel);
+ }
- } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
- throw new RuntimeException(e);
+ @Override
+ public boolean isTypeOf(DefinitionOfDataType parameterDefinition, String dataType, ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaServiceModel) {
+ return isTypeOf(parameterDefinition, dataType, GET_DATA_TYPE_METHOD_NAME, serviceTemplate, toscaServiceModel);
+ }
+
+ private <T> boolean isTypeOf(T object, String type, String getTypesMethodName, ServiceTemplate serviceTemplate,
+ ToscaServiceModel toscaServiceModel) {
+ if (object == null) {
+ return false;
+ }
+
+ try {
+ String objectType = (String) object.getClass().getMethod(GET_TYPE_METHOD_NAME).invoke(object);
+ if (Objects.equals(objectType, type)) {
+ return true;
+ }
+
+ Optional<Boolean> typeExistInServiceTemplateHierarchy =
+ isTypeExistInServiceTemplateHierarchy(type, objectType, getTypesMethodName, serviceTemplate,
+ toscaServiceModel, null);
+ return typeExistInServiceTemplateHierarchy.orElseThrow(
+ () -> new CoreException(new ToscaElementTypeNotFoundErrorBuilder(objectType).build()));
+
+ } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
}
- }
}
+
+