From d4cc2beaef58a4fc95bdc281efd879b1d1edf279 Mon Sep 17 00:00:00 2001 From: shiria Date: Thu, 5 Jul 2018 13:42:33 +0300 Subject: Fix node filter get methods Support normative properties and capabilities as regular get methods Issue-ID: SDC-1455 Change-Id: I1ab709a17a2e03f81a7ae789b8c8fb83a1d03e81 Signed-off-by: shiria --- .../onap/sdc/tosca/datatypes/model/NodeFilter.java | 91 +++++++++++++--------- .../sdc/tosca/datatypes/ToscaModelTest.java | 52 +++++++------ .../model/serviceTemplateWithServiceFilter.yaml | 21 +++-- 3 files changed, 96 insertions(+), 68 deletions(-) diff --git a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/NodeFilter.java b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/NodeFilter.java index 5f3d46504d..2c95568a66 100644 --- a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/NodeFilter.java +++ b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/NodeFilter.java @@ -19,7 +19,8 @@ package org.onap.sdc.tosca.datatypes.model; import org.apache.commons.collections4.CollectionUtils; import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil; -import java.util.Iterator; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -29,66 +30,84 @@ public class NodeFilter { private List>> properties; private List> capabilities; - //can't not be removed, in used in snake yaml public List> getCapabilities() { return capabilities; } public void setCapabilities(List> capabilities) { - this.capabilities = capabilities; + this.capabilities = getNormalizeCapabilities(capabilities); } - //can't not be removed, in used in snake yaml - public List>> getProperties() { - return properties; + public void setProperties(List>> properties) { + this.properties = getNormalizeProperties(properties); } - - //use this function in order to get node filter properties instead of getProperties function - public List>> getNormalizeProperties() { - return getNormalizeProperties(properties); + public List>> getProperties() { + return properties; } private List>> getNormalizeProperties(List>> properties) { - ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil(); if (CollectionUtils.isEmpty(properties)) { return properties; } - for (Map> propertyConstraintsEntity : properties) { - String propertyKey = propertyConstraintsEntity.keySet().iterator().next(); - List constraints = propertyConstraintsEntity.get(propertyKey); - Iterator iterator = constraints.iterator(); - while (iterator.hasNext()) { - Constraint constraintObj = iterator.next(); - Constraint constraint = toscaExtensionYamlUtil - .yamlToObject(toscaExtensionYamlUtil.objectToYaml(constraintObj), - Constraint.class); - constraints.remove(constraintObj); - constraints.add(constraint); - } + List>> normalizeProperties = new ArrayList<>(); + for (Map> propertyEntry : properties) { + Map> normalizePropertyEntry = getNormalizePropertyEntry(propertyEntry); + normalizeProperties.add(normalizePropertyEntry); } - return properties; + return normalizeProperties; + + } + + private Map> getNormalizePropertyEntry(Map> propertyEntry) { + Map> normalizePropertyEntry = new HashMap<>(); + String propertyKey = propertyEntry.keySet().iterator().next(); //only one entry exist in the map + List constraints = propertyEntry.get(propertyKey); + List normalizeConstraints = getNormalizeConstrains(constraints); + normalizePropertyEntry.put(propertyKey, normalizeConstraints); + return normalizePropertyEntry; } - //use this function in order to get node filter capabilities instead of getCapabilities function - public List> getNormalizeCapabilities() { + private List getNormalizeConstrains(List constraints) { ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil(); + List normalizeConstraints = new ArrayList<>(); + for (Object constraintObj : constraints) { + Constraint normalizeConstraint = toscaExtensionYamlUtil + .yamlToObject(toscaExtensionYamlUtil.objectToYaml(constraintObj), + Constraint.class); + normalizeConstraints.add(normalizeConstraint); + } + return normalizeConstraints; + } + + public List> getNormalizeCapabilities(List> capabilities) { if (CollectionUtils.isEmpty(capabilities)) { return capabilities; } + List> normalizeCapabilities = new ArrayList<>(); for (Map capabilityEntry : capabilities) { - String capabilityKey = capabilityEntry.keySet().iterator().next(); - Object capabilityFilterObj = capabilityEntry.get(capabilityKey); - CapabilityFilter capabilityFilter = toscaExtensionYamlUtil.yamlToObject( - toscaExtensionYamlUtil.objectToYaml(capabilityFilterObj), CapabilityFilter.class); - capabilityFilter.setProperties(getNormalizeProperties(capabilityFilter.getProperties())); - capabilityEntry.remove(capabilityKey); - capabilityEntry.put(capabilityKey, capabilityFilter); + Map normalizeCapabilityEntry = getNormalizeCapabilityEntry(capabilityEntry); + normalizeCapabilities.add(normalizeCapabilityEntry); } - return capabilities; + return normalizeCapabilities; } - public void setProperties(List>> properties) { - this.properties = properties; + private Map getNormalizeCapabilityEntry(Map capabilityEntry) { + Map normalizeCapabilityEntry = new HashMap<>(); + String capabilityKey = capabilityEntry.keySet().iterator().next(); //only one entry exist in the map + Object capabilityFilterObj = capabilityEntry.get(capabilityKey); + CapabilityFilter normalizeCapabilityFilter = getNormalizeCapabilityFilter(capabilityFilterObj); + normalizeCapabilityEntry.put(capabilityKey, normalizeCapabilityFilter); + return normalizeCapabilityEntry; + } + + + private CapabilityFilter getNormalizeCapabilityFilter(Object capabilityFilterObj) { + ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil(); + CapabilityFilter capabilityFilter = toscaExtensionYamlUtil.yamlToObject( + toscaExtensionYamlUtil.objectToYaml(capabilityFilterObj), CapabilityFilter.class); + capabilityFilter.setProperties(getNormalizeProperties(capabilityFilter.getProperties())); + + return capabilityFilter; } } diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/test/java/org/openecomp/sdc/tosca/datatypes/ToscaModelTest.java b/openecomp-be/lib/openecomp-tosca-lib/src/test/java/org/openecomp/sdc/tosca/datatypes/ToscaModelTest.java index 3938d8f427..5412b55129 100644 --- a/openecomp-be/lib/openecomp-tosca-lib/src/test/java/org/openecomp/sdc/tosca/datatypes/ToscaModelTest.java +++ b/openecomp-be/lib/openecomp-tosca-lib/src/test/java/org/openecomp/sdc/tosca/datatypes/ToscaModelTest.java @@ -25,32 +25,9 @@ import java.util.Map; import java.util.Optional; import org.junit.Assert; import org.junit.Test; -import org.onap.sdc.tosca.datatypes.model.ArtifactType; -import org.onap.sdc.tosca.datatypes.model.AttributeDefinition; -import org.onap.sdc.tosca.datatypes.model.CapabilityAssignment; -import org.onap.sdc.tosca.datatypes.model.CapabilityDefinition; -import org.onap.sdc.tosca.datatypes.model.Constraint; -import org.onap.sdc.tosca.datatypes.model.Directive; -import org.onap.sdc.tosca.datatypes.model.Implementation; -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.NodeFilter; -import org.onap.sdc.tosca.datatypes.model.NodeTemplate; -import org.onap.sdc.tosca.datatypes.model.NodeType; -import org.onap.sdc.tosca.datatypes.model.OperationDefinition; -import org.onap.sdc.tosca.datatypes.model.OperationDefinitionTemplate; -import org.onap.sdc.tosca.datatypes.model.OperationDefinitionType; -import org.onap.sdc.tosca.datatypes.model.ParameterDefinition; -import org.onap.sdc.tosca.datatypes.model.PropertyDefinition; -import org.onap.sdc.tosca.datatypes.model.PropertyType; +import org.onap.sdc.tosca.datatypes.model.*; 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.onap.sdc.tosca.datatypes.model.SubstitutionMapping; -import org.onap.sdc.tosca.datatypes.model.TopologyTemplate; +import org.onap.sdc.tosca.datatypes.model.extension.*; import org.onap.sdc.tosca.datatypes.model.heatextend.ParameterDefinitionExt; import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil; import org.onap.sdc.tosca.services.YamlUtil; @@ -63,6 +40,9 @@ public class ToscaModelTest { public static final String FIRST_NODE_TEMPLATE = "firstNodeTemplate"; public static final String REQ1 = "req1"; public static final String REQ2 = "req2"; + public static final String SERVICE_FILTER_TOSCA_ID = "{get_input=inParam1}"; + public static final String VMD_NAME = "vmdName"; + public static final String DIRECTOR = "director"; private YamlUtil yamlUtil = new YamlUtil(); private ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil(); private static final String INTERFACE_ID = "inter_1"; @@ -436,10 +416,32 @@ public class ToscaModelTest { Object req1 = nodeTemplateRequirements.get(REQ1); Assert.assertEquals(true, req1 instanceof org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignment); Assert.assertNotNull(((org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignment)req1).getService_filter()); + List>> properties = + ((org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignment) req1).getService_filter() + .getProperties(); + Assert.assertNotNull(properties); + List vmdNameConstrain = properties.get(0).get(VMD_NAME); + Assert.assertNotNull(vmdNameConstrain); + Assert.assertNotNull(vmdNameConstrain.get(0).getEqual()); + + List> capabilities = + ((org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignment) req1).getService_filter() + .getCapabilities(); + Assert.assertNotNull(capabilities); + CapabilityFilter capabilityFilter = capabilities.get(0).get(DIRECTOR); + Assert.assertNotNull(capabilityFilter); + Assert.assertNotNull(capabilityFilter.getProperties()); + Object req2 = nodeTemplateRequirements.get(REQ2); Assert.assertEquals(true, req2 instanceof org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignment); Assert.assertNotNull(((org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignment)req2).getService_filter()); + Object tosca_id = + ((org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignment) req2).getService_filter() + .getTosca_id(); + Assert.assertNotNull(tosca_id); + Assert.assertEquals(SERVICE_FILTER_TOSCA_ID, tosca_id.toString()); + String serviceTemplateYaml = toscaExtensionYamlUtil.objectToYaml(serviceTemplateWithServiceFilter); Assert.assertNotNull(serviceTemplateYaml); diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/mock/model/serviceTemplateWithServiceFilter.yaml b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/mock/model/serviceTemplateWithServiceFilter.yaml index e1a49a46c0..87a8fcd6b6 100644 --- a/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/mock/model/serviceTemplateWithServiceFilter.yaml +++ b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/mock/model/serviceTemplateWithServiceFilter.yaml @@ -80,13 +80,20 @@ topology_template: att2: '{ get_input: my_mysql_rootpw }' att1: att1Val requirements: - - req1: - service_filter: - properties: - - name : [{get_input : inParam1}] - - req2: - service_filter: - tosca_id: {get_input : inParam1} + - req1: +# capability: director + service_filter: + properties: + - vmdName: [{ equal : myName }] + - controllers: [{ equal : { get_input: controllers } }] + capabilities: + - director: + properties: + - url_path : + - { equal : { get_input: directorUrl } } + - req2: + service_filter: + tosca_id: {get_input : inParam1} substitution_mappings: node_type: myNodeType.node capabilities: -- cgit 1.2.3-korg