summaryrefslogtreecommitdiffstats
path: root/common-be/src/main
diff options
context:
space:
mode:
authorandre.schmid <andre.schmid@est.tech>2022-08-10 14:50:08 +0100
committerVasyl Razinkov <vasyl.razinkov@est.tech>2022-09-08 18:24:44 +0000
commit92b18f188105d5ba4b2c469cdfaedc7d2953d593 (patch)
treedf7c7562faa99a76b0e6b5bc079de8d514b35006 /common-be/src/main
parentc0c2637f201f488a74cb1916f05eece0cc207e9d (diff)
Support TOSCA functions in Node Filters
Adds support to use tosca functions as value in the node property filters and substitution filters Change-Id: Id242691cc9ddd233245b58f052b9f0e2c7bbd66b Issue-ID: SDC-4128 Signed-off-by: André Schmid <andre.schmid@est.tech>
Diffstat (limited to 'common-be/src/main')
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/CINodeFilterDataDefinition.java6
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterConstraintDataDefinition.java41
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterConstraintDataDefinitionJsonDeserializer.java107
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterDataDefinition.java (renamed from common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementNodeFilterPropertyDataDefinition.java)20
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementNodeFilterCapabilityDataDefinition.java6
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementSubstitutionFilterCapabilityDataDefinition.java6
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/SubstitutionFilterDataDefinition.java6
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/SubstitutionFilterPropertyDataDefinition.java (renamed from common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementSubstitutionFilterPropertyDataDefinition.java)17
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunction.java18
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java5
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionType.java4
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaGetFunctionDataDefinition.java4
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/ConstraintType.java71
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/FilterValueType.java53
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/PropertyFilterTargetType.java26
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/utils/PropertyFilterConstraintDataDefinitionHelper.java198
16 files changed, 560 insertions, 28 deletions
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/CINodeFilterDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/CINodeFilterDataDefinition.java
index 22055e0620..bef9e52b8a 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/CINodeFilterDataDefinition.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/CINodeFilterDataDefinition.java
@@ -44,12 +44,12 @@ public class CINodeFilterDataDefinition extends ToscaDataDefinition implements S
return getToscaPresentationValue(JsonPresentationFields.TOSCA_ID);
}
- public ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> getProperties() {
- return (ListDataDefinition<RequirementNodeFilterPropertyDataDefinition>) getToscaPresentationValue(
+ public ListDataDefinition<PropertyFilterDataDefinition> getProperties() {
+ return (ListDataDefinition<PropertyFilterDataDefinition>) getToscaPresentationValue(
JsonPresentationFields.PROPERTIES);
}
- public void setProperties(ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> properties) {
+ public void setProperties(ListDataDefinition<PropertyFilterDataDefinition> properties) {
setToscaPresentationValue(JsonPresentationFields.PROPERTIES, properties);
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterConstraintDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterConstraintDataDefinition.java
new file mode 100644
index 0000000000..9284b530eb
--- /dev/null
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterConstraintDataDefinition.java
@@ -0,0 +1,41 @@
+/*
+ * -
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.datatypes.elements;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
+import org.openecomp.sdc.be.datatypes.enums.FilterValueType;
+import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType;
+
+@Data
+@NoArgsConstructor
+@JsonDeserialize(using = PropertyFilterConstraintDataDefinitionJsonDeserializer.class)
+public class PropertyFilterConstraintDataDefinition {
+ private String propertyName;
+ private String capabilityName;
+ private PropertyFilterTargetType targetType;
+ private ConstraintType operator;
+ private FilterValueType valueType;
+ private Object value;
+}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterConstraintDataDefinitionJsonDeserializer.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterConstraintDataDefinitionJsonDeserializer.java
new file mode 100644
index 0000000000..a767133a4c
--- /dev/null
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterConstraintDataDefinitionJsonDeserializer.java
@@ -0,0 +1,107 @@
+/*
+ * -
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.datatypes.elements;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
+import org.openecomp.sdc.be.datatypes.enums.FilterValueType;
+import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType;
+import org.openecomp.sdc.be.utils.PropertyFilterConstraintDataDefinitionHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PropertyFilterConstraintDataDefinitionJsonDeserializer extends StdDeserializer<PropertyFilterConstraintDataDefinition> {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PropertyFilterConstraintDataDefinitionJsonDeserializer.class);
+ private static final String COULD_NOT_PARSE_CLASS = "Could not parse {} value as {}";
+
+ public PropertyFilterConstraintDataDefinitionJsonDeserializer() {
+ this(null);
+ }
+
+ public PropertyFilterConstraintDataDefinitionJsonDeserializer(Class<?> vc) {
+ super(vc);
+ }
+
+ @Override
+ public PropertyFilterConstraintDataDefinition deserialize(final JsonParser jsonParser, final DeserializationContext context) throws IOException {
+ final JsonNode node = jsonParser.getCodec().readTree(jsonParser);
+
+ if (node.isTextual()) {
+ return PropertyFilterConstraintDataDefinitionHelper.convertLegacyConstraint(node.asText());
+ }
+
+ final var propertyFilterConstraint = new PropertyFilterConstraintDataDefinition();
+ if (node.get("propertyName") != null) {
+ propertyFilterConstraint.setPropertyName(node.get("propertyName").asText());
+ }
+ if (node.get("capabilityName") != null) {
+ propertyFilterConstraint.setCapabilityName(node.get("capabilityName").asText());
+ }
+ if (node.get("targetType") != null) {
+ propertyFilterConstraint.setTargetType(PropertyFilterTargetType.valueOf(node.get("targetType").asText()));
+ }
+ if (node.get("operator") != null) {
+ propertyFilterConstraint.setOperator(ConstraintType.valueOf(node.get("operator").asText()));
+ }
+ if (node.get("valueType") != null) {
+ propertyFilterConstraint.setValueType(FilterValueType.valueOf(node.get("valueType").asText()));
+ }
+ propertyFilterConstraint.setValue(deserializeValue(node.get("value")));
+
+ return propertyFilterConstraint;
+ }
+
+ private Object deserializeValue(final JsonNode value) {
+ final ObjectMapper objectMapper = new ObjectMapper();
+ try {
+ return objectMapper.treeToValue(value, ToscaFunction.class);
+ } catch (final Exception e) {
+ LOGGER.debug(COULD_NOT_PARSE_CLASS, PropertyFilterConstraintDataDefinition.class.getName(), ToscaFunction.class.getName(), e);
+ }
+ try {
+ return objectMapper.treeToValue(value, Map.class);
+ } catch (final Exception e) {
+ LOGGER.debug(COULD_NOT_PARSE_CLASS, PropertyFilterConstraintDataDefinition.class.getName(), Map.class.getName(), e);
+ }
+ try {
+ return objectMapper.treeToValue(value, List.class);
+ } catch (final Exception e) {
+ LOGGER.debug(COULD_NOT_PARSE_CLASS, PropertyFilterConstraintDataDefinition.class.getName(), List.class.getName(), e);
+ }
+ try {
+ return objectMapper.treeToValue(value, String.class);
+ } catch (final Exception e) {
+ LOGGER.debug(COULD_NOT_PARSE_CLASS, PropertyFilterConstraintDataDefinition.class.getName(), String.class.getName(), e);
+ }
+
+ return null;
+ }
+
+}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementNodeFilterPropertyDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterDataDefinition.java
index fff5dce9da..decdc6ea45 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementNodeFilterPropertyDataDefinition.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyFilterDataDefinition.java
@@ -15,19 +15,24 @@
*/
package org.openecomp.sdc.be.datatypes.elements;
-import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
-import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
-
import java.io.Serializable;
import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
+import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
-public class RequirementNodeFilterPropertyDataDefinition extends ToscaDataDefinition implements Serializable {
+public class PropertyFilterDataDefinition extends ToscaDataDefinition implements Serializable {
- public List<String> getConstraints() {
- return (List<String>) getToscaPresentationValue(JsonPresentationFields.PROPERTY_FILTER_CONSTRAINT);
+ public List<PropertyFilterConstraintDataDefinition> getConstraints() {
+ final List<PropertyFilterConstraintDataDefinition> constraintList =
+ (List<PropertyFilterConstraintDataDefinition>) getToscaPresentationValue(JsonPresentationFields.PROPERTY_FILTER_CONSTRAINT);
+ if (CollectionUtils.isEmpty(constraintList)) {
+ return List.of();
+ }
+ return constraintList;
}
- public void setConstraints(List<String> constraints) {
+ public void setConstraints(final List<PropertyFilterConstraintDataDefinition> constraints) {
setToscaPresentationValue(JsonPresentationFields.PROPERTY_FILTER_CONSTRAINT, constraints);
}
@@ -38,4 +43,5 @@ public class RequirementNodeFilterPropertyDataDefinition extends ToscaDataDefini
public void setName(String name) {
setToscaPresentationValue(JsonPresentationFields.PROPERTY_FILTER_NAME, name);
}
+
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementNodeFilterCapabilityDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementNodeFilterCapabilityDataDefinition.java
index 34dc43760f..637bf5f646 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementNodeFilterCapabilityDataDefinition.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementNodeFilterCapabilityDataDefinition.java
@@ -37,12 +37,12 @@ public class RequirementNodeFilterCapabilityDataDefinition extends ToscaDataDefi
setToscaPresentationValue(JsonPresentationFields.NAME, name);
}
- public ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> getProperties() {
- return (ListDataDefinition<RequirementNodeFilterPropertyDataDefinition>) getToscaPresentationValue(
+ public ListDataDefinition<PropertyFilterDataDefinition> getProperties() {
+ return (ListDataDefinition<PropertyFilterDataDefinition>) getToscaPresentationValue(
JsonPresentationFields.PROPERTIES);
}
- public void setProperties(ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> properties) {
+ public void setProperties(ListDataDefinition<PropertyFilterDataDefinition> properties) {
setToscaPresentationValue(JsonPresentationFields.PROPERTIES, properties);
}
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementSubstitutionFilterCapabilityDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementSubstitutionFilterCapabilityDataDefinition.java
index 242eb490ef..d5c1525f55 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementSubstitutionFilterCapabilityDataDefinition.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementSubstitutionFilterCapabilityDataDefinition.java
@@ -39,12 +39,12 @@ public class RequirementSubstitutionFilterCapabilityDataDefinition extends Tosca
setToscaPresentationValue(JsonPresentationFields.NAME, name);
}
- public ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> getProperties() {
- return (ListDataDefinition<RequirementNodeFilterPropertyDataDefinition>) getToscaPresentationValue(
+ public ListDataDefinition<PropertyFilterDataDefinition> getProperties() {
+ return (ListDataDefinition<PropertyFilterDataDefinition>) getToscaPresentationValue(
JsonPresentationFields.PROPERTIES);
}
- public void setProperties(final ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> properties) {
+ public void setProperties(final ListDataDefinition<PropertyFilterDataDefinition> properties) {
setToscaPresentationValue(JsonPresentationFields.PROPERTIES, properties);
}
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/SubstitutionFilterDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/SubstitutionFilterDataDefinition.java
index beb5aac1d0..36c125a27b 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/SubstitutionFilterDataDefinition.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/SubstitutionFilterDataDefinition.java
@@ -46,12 +46,12 @@ public class SubstitutionFilterDataDefinition extends ToscaDataDefinition implem
return getToscaPresentationValue(JsonPresentationFields.TOSCA_ID);
}
- public ListDataDefinition<RequirementSubstitutionFilterPropertyDataDefinition> getProperties() {
- return (ListDataDefinition<RequirementSubstitutionFilterPropertyDataDefinition>) getToscaPresentationValue(
+ public ListDataDefinition<SubstitutionFilterPropertyDataDefinition> getProperties() {
+ return (ListDataDefinition<SubstitutionFilterPropertyDataDefinition>) getToscaPresentationValue(
JsonPresentationFields.PROPERTIES);
}
- public void setProperties(final ListDataDefinition<RequirementSubstitutionFilterPropertyDataDefinition> properties) {
+ public void setProperties(final ListDataDefinition<SubstitutionFilterPropertyDataDefinition> properties) {
setToscaPresentationValue(JsonPresentationFields.PROPERTIES, properties);
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementSubstitutionFilterPropertyDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/SubstitutionFilterPropertyDataDefinition.java
index b1b53bb4ae..977c374712 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/RequirementSubstitutionFilterPropertyDataDefinition.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/SubstitutionFilterPropertyDataDefinition.java
@@ -20,24 +20,25 @@ package org.openecomp.sdc.be.datatypes.elements;
import java.io.Serializable;
import java.util.List;
-import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
-public class RequirementSubstitutionFilterPropertyDataDefinition extends ToscaDataDefinition implements Serializable {
+public class SubstitutionFilterPropertyDataDefinition extends ToscaDataDefinition implements Serializable {
- public List<String> getConstraints() {
- return (List<String>) getToscaPresentationValue(JsonPresentationFields.PROPERTY_FILTER_CONSTRAINT);
+ private final PropertyFilterDataDefinition propertyFilterDataDefinition = new PropertyFilterDataDefinition();
+
+ public List<PropertyFilterConstraintDataDefinition> getConstraints() {
+ return propertyFilterDataDefinition.getConstraints();
}
- public void setConstraints(final List<String> constraints) {
- setToscaPresentationValue(JsonPresentationFields.PROPERTY_FILTER_CONSTRAINT, constraints);
+ public void setConstraints(final List<PropertyFilterConstraintDataDefinition> constraints) {
+ propertyFilterDataDefinition.setConstraints(constraints);
}
public String getName() {
- return (String) getToscaPresentationValue(JsonPresentationFields.PROPERTY_FILTER_NAME);
+ return propertyFilterDataDefinition.getName();
}
public void setName(final String name) {
- setToscaPresentationValue(JsonPresentationFields.PROPERTY_FILTER_NAME, name);
+ propertyFilterDataDefinition.setName(name);
}
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunction.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunction.java
index 40664a133c..81b4ec73a9 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunction.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunction.java
@@ -26,7 +26,25 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using = ToscaFunctionJsonDeserializer.class)
public interface ToscaFunction {
+ /**
+ * Gets the function type.
+ *
+ * @return the function type.
+ */
ToscaFunctionType getType();
+
+ /**
+ * Builds the tosca function value as string.
+ *
+ * @return the function value as string
+ */
String getValue();
+ /**
+ * Returns the value mapped as a JSON object.
+ *
+ * @return the value as JSON object.
+ */
+ Object getJsonObjectValue();
+
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java
index 363af1cdeb..c262699cc2 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java
@@ -146,8 +146,11 @@ public class ToscaFunctionJsonDeserializer extends StdDeserializer<ToscaFunction
final var toscaConcatFunction = new ToscaConcatFunction();
final List<ToscaFunctionParameter> functionParameterList = new ArrayList<>();
final JsonNode parametersNode = concatFunctionJsonNode.get("parameters");
+ if (parametersNode == null) {
+ return toscaConcatFunction;
+ }
if (!parametersNode.isArray()) {
- throw context.instantiationException(List.class, "");
+ throw context.instantiationException(List.class, "Expecting an array for the 'parameters' entry");
}
for (final JsonNode parameterNode : parametersNode) {
final JsonNode typeJsonNode = parameterNode.get("type");
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionType.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionType.java
index 4579ac2410..2636c4f6d7 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionType.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionType.java
@@ -25,6 +25,7 @@ import java.util.Arrays;
import java.util.Optional;
import lombok.AllArgsConstructor;
import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
@AllArgsConstructor
@Getter
@@ -40,6 +41,9 @@ public enum ToscaFunctionType {
private final String name;
public static Optional<ToscaFunctionType> findType(final String functionType) {
+ if (StringUtils.isBlank(functionType)) {
+ return Optional.empty();
+ }
return Arrays.stream(values()).filter(toscaFunctionType -> toscaFunctionType.getName().equalsIgnoreCase(functionType)).findFirst();
}
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaGetFunctionDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaGetFunctionDataDefinition.java
index f19217e69c..4fe3f3ae13 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaGetFunctionDataDefinition.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaGetFunctionDataDefinition.java
@@ -21,6 +21,7 @@
package org.openecomp.sdc.be.datatypes.elements;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
@@ -47,6 +48,7 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
//necessary for JSON conversions
}
+ @JsonIgnore
public boolean isSubProperty() {
return propertyPathFromSource != null && propertyPathFromSource.size() > 1;
}
@@ -58,6 +60,7 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
return new Gson().toJson(getJsonObjectValue());
}
+ @JsonIgnore
@Override
public Object getJsonObjectValue() {
if (functionType == null) {
@@ -126,6 +129,7 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
}
}
+ @JsonIgnore
@Override
public String getValue() {
return this.generatePropertyValue();
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/ConstraintType.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/ConstraintType.java
new file mode 100644
index 0000000000..cef310ea01
--- /dev/null
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/ConstraintType.java
@@ -0,0 +1,71 @@
+/*
+ * -
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.sdc.be.datatypes.enums;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import lombok.Getter;
+
+@Getter
+public enum ConstraintType {
+ EQUAL("equal"),
+ IN_RANGE("in_range", "inRange"),
+ GREATER_THAN("greater_than", "greaterThan"),
+ GREATER_OR_EQUAL("greater_or_equal", "greaterOrEqual"),
+ LESS_OR_EQUAL("less_or_equal", "lessOrEqual"),
+ LENGTH("length"),
+ MIN_LENGTH("min_length", "minLength"),
+ MAX_LENGTH("max_length", "maxLength"),
+ VALID_VALUES("valid_values", "validValues"),
+ LESS_THAN("less_than", "lessThan"),
+ SCHEMA("schema");
+
+ private static final Set<ConstraintType> comparableConstraints = Set.of(ConstraintType.GREATER_THAN, ConstraintType.LESS_THAN);
+ private final String type;
+ private final List<String> typeAlias;
+
+
+ ConstraintType(final String type, final String... typeAliases) {
+ this.type = type;
+ if (typeAliases == null) {
+ this.typeAlias = Collections.emptyList();
+ } else {
+ this.typeAlias = Arrays.asList(typeAliases);
+ }
+ }
+
+ public static Optional<ConstraintType> findByType(final String type) {
+ if (type == null) {
+ return Optional.empty();
+ }
+ return Arrays.stream(ConstraintType.values())
+ .filter(constraintType -> constraintType.getType().equals(type) || constraintType.getTypeAlias().contains(type))
+ .findFirst();
+ }
+
+ public boolean isComparable() {
+ return comparableConstraints.contains(this);
+ }
+
+}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/FilterValueType.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/FilterValueType.java
new file mode 100644
index 0000000000..cacc4b1bac
--- /dev/null
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/FilterValueType.java
@@ -0,0 +1,53 @@
+/*
+ * -
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.datatypes.enums;
+
+import java.util.Arrays;
+import java.util.Optional;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+@AllArgsConstructor
+@Getter
+public enum FilterValueType {
+ STATIC("static", "static"),
+ GET_PROPERTY("get_property", "property"),
+ GET_INPUT("get_input", "service_input"),
+ GET_ATTRIBUTE("get_attribute", null),
+ YAML("yaml", null),
+ CONCAT("concat", null);
+
+ private final String name;
+ private final String legacyName;
+
+ public static Optional<FilterValueType> findByName(final String name) {
+ if (StringUtils.isEmpty(name)) {
+ return Optional.empty();
+ }
+ return Arrays.stream(FilterValueType.values()).filter(filterValueType ->
+ filterValueType.getName().equalsIgnoreCase(name) ||
+ (filterValueType.getLegacyName() != null && filterValueType.getLegacyName().equalsIgnoreCase(name))
+ ).findFirst();
+ }
+
+}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/PropertyFilterTargetType.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/PropertyFilterTargetType.java
new file mode 100644
index 0000000000..df472508fe
--- /dev/null
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/PropertyFilterTargetType.java
@@ -0,0 +1,26 @@
+/*
+ * -
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.datatypes.enums;
+
+public enum PropertyFilterTargetType {
+ CAPABILITY, PROPERTY
+}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/utils/PropertyFilterConstraintDataDefinitionHelper.java b/common-be/src/main/java/org/openecomp/sdc/be/utils/PropertyFilterConstraintDataDefinitionHelper.java
new file mode 100644
index 0000000000..63c6781b94
--- /dev/null
+++ b/common-be/src/main/java/org/openecomp/sdc/be/utils/PropertyFilterConstraintDataDefinitionHelper.java
@@ -0,0 +1,198 @@
+/*
+ * -
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.utils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.openecomp.sdc.be.datatypes.elements.PropertyFilterConstraintDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.ToscaConcatFunction;
+import org.openecomp.sdc.be.datatypes.elements.ToscaFunction;
+import org.openecomp.sdc.be.datatypes.elements.ToscaFunctionParameter;
+import org.openecomp.sdc.be.datatypes.elements.ToscaFunctionType;
+import org.openecomp.sdc.be.datatypes.elements.ToscaGetFunctionDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.ToscaStringParameter;
+import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
+import org.openecomp.sdc.be.datatypes.enums.FilterValueType;
+import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType;
+import org.openecomp.sdc.be.datatypes.enums.PropertySource;
+import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType;
+import org.openecomp.sdc.exception.InvalidArgumentException;
+import org.yaml.snakeyaml.Yaml;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class PropertyFilterConstraintDataDefinitionHelper {
+
+ public static PropertyFilterConstraintDataDefinition convertLegacyConstraint(final String constraint) {
+ final var propertyFilterConstraint = new PropertyFilterConstraintDataDefinition();
+ final Map<String, Object> constraintYaml = new Yaml().load(constraint);
+ final String propertyName = constraintYaml.keySet().iterator().next();
+ propertyFilterConstraint.setPropertyName(propertyName);
+ final Map<String, Object> operatorYaml = (Map<String, Object>) constraintYaml.get(propertyName);
+ final String operator = operatorYaml.keySet().iterator().next();
+ propertyFilterConstraint.setOperator(ConstraintType.findByType(operator).orElse(null));
+ final Object valueYaml = operatorYaml.get(operator);
+ final Optional<ToscaFunction> toscaFunction = createToscaFunctionFromLegacyConstraintValue(valueYaml);
+ if (toscaFunction.isPresent()) {
+ propertyFilterConstraint.setValue(toscaFunction.get());
+ } else {
+ propertyFilterConstraint.setValue(valueYaml);
+ }
+ propertyFilterConstraint.setValueType(detectValueType(valueYaml));
+ propertyFilterConstraint.setTargetType(PropertyFilterTargetType.PROPERTY);
+ return propertyFilterConstraint;
+ }
+
+ public static Optional<ToscaFunction> createToscaFunctionFromLegacyConstraintValue(final Object filterValue) {
+ if (!(filterValue instanceof Map)) {
+ return Optional.empty();
+ }
+ final Map<?, ?> filterValueAsMap = (Map<?, ?>) filterValue;
+ final Set<?> keys = filterValueAsMap.keySet();
+ if (keys.size() != 1) {
+ return Optional.empty();
+ }
+ final Object toscaFunctionTypeObject = keys.iterator().next();
+ if (!(toscaFunctionTypeObject instanceof String)) {
+ return Optional.empty();
+ }
+ final ToscaFunctionType toscaFunctionType = ToscaFunctionType.findType((String) toscaFunctionTypeObject).orElse(null);
+ if (toscaFunctionType == null) {
+ return Optional.empty();
+ }
+ switch (toscaFunctionType) {
+ case GET_INPUT:
+ return readLegacyGetInputConstraintValue(filterValueAsMap, toscaFunctionTypeObject);
+ case GET_ATTRIBUTE:
+ case GET_PROPERTY:
+ return readLegacyGetPropertyConstraintValue(filterValueAsMap, toscaFunctionTypeObject, toscaFunctionType);
+ case CONCAT:
+ return readLegacyConcatConstraintValue(filterValueAsMap, toscaFunctionTypeObject);
+ default:
+ return Optional.empty();
+ }
+ }
+
+ public static Optional<FilterValueType> convertFromToscaFunctionType(final ToscaFunctionType toscaFunctionType) {
+ return FilterValueType.findByName(toscaFunctionType.getName());
+ }
+
+ private static Optional<ToscaFunction> readLegacyConcatConstraintValue(Map<?, ?> filterValueAsMap, Object toscaFunctionType) {
+ final List<Object> concatValue;
+ try {
+ concatValue = (List<Object>) filterValueAsMap.get(toscaFunctionType);
+ } catch (final Exception ignored) {
+ return Optional.empty();
+ }
+ if (concatValue.isEmpty()) {
+ return Optional.empty();
+ }
+ final var toscaConcatFunction = new ToscaConcatFunction();
+ for (Object parameter : concatValue) {
+ if (parameter instanceof String) {
+ final ToscaStringParameter toscaStringParameter = new ToscaStringParameter();
+ toscaStringParameter.setValue((String) parameter);
+ toscaConcatFunction.addParameter(toscaStringParameter);
+ } else {
+ createToscaFunctionFromLegacyConstraintValue(parameter)
+ .ifPresent(toscaFunction -> toscaConcatFunction.addParameter((ToscaFunctionParameter) toscaFunction));
+ }
+ }
+ return Optional.of(toscaConcatFunction);
+ }
+
+ private static Optional<ToscaFunction> readLegacyGetPropertyConstraintValue(Map<?, ?> filterValueAsMap, Object toscaFunctionType,
+ ToscaFunctionType toscaFunctionType1) {
+ final var toscaGetFunction = new ToscaGetFunctionDataDefinition();
+ toscaGetFunction.setFunctionType(ToscaGetFunctionType.fromToscaFunctionType(toscaFunctionType1)
+ .orElseThrow(() -> new InvalidArgumentException("Could not convert a ToscaFunctionType to a ToscaGetFunctionType"))
+ );
+ final List<String> getFunctionValue;
+ try {
+ getFunctionValue = (List<String>) filterValueAsMap.get(toscaFunctionType);
+ } catch (final Exception ignored) {
+ return Optional.of(toscaGetFunction);
+ }
+ if (!getFunctionValue.isEmpty()) {
+ final Optional<PropertySource> propertySource = PropertySource.findType(getFunctionValue.get(0));
+ if (propertySource.isPresent()) {
+ toscaGetFunction.setPropertySource(propertySource.get());
+ } else {
+ toscaGetFunction.setPropertySource(PropertySource.INSTANCE);
+ toscaGetFunction.setSourceName(getFunctionValue.get(0));
+ }
+ final List<String> propertyPathFromSource = getFunctionValue.subList(1, getFunctionValue.size());
+ toscaGetFunction.setPropertyPathFromSource(propertyPathFromSource);
+ toscaGetFunction.setPropertyName(propertyPathFromSource.get(propertyPathFromSource.size() - 1));
+ }
+ return Optional.of(toscaGetFunction);
+ }
+
+ private static Optional<ToscaFunction> readLegacyGetInputConstraintValue(Map<?, ?> filterValueAsMap, Object toscaFunctionType) {
+ final var toscaGetFunction = new ToscaGetFunctionDataDefinition();
+ toscaGetFunction.setFunctionType(ToscaGetFunctionType.GET_INPUT);
+ final List<String> getFunctionValue;
+ final Object valueAsObject = filterValueAsMap.get(toscaFunctionType);
+ if (valueAsObject instanceof String) {
+ getFunctionValue = List.of((String) valueAsObject);
+ } else if (valueAsObject instanceof List) {
+ try {
+ getFunctionValue = (List<String>) filterValueAsMap.get(toscaFunctionType);
+ } catch (final Exception ignored) {
+ return Optional.empty();
+ }
+ } else {
+ return Optional.empty();
+ }
+
+ toscaGetFunction.setPropertyPathFromSource(getFunctionValue);
+ if (!getFunctionValue.isEmpty()) {
+ toscaGetFunction.setPropertyName(getFunctionValue.get(getFunctionValue.size() - 1));
+ }
+ toscaGetFunction.setPropertySource(PropertySource.SELF);
+ return Optional.of(toscaGetFunction);
+ }
+
+ private static FilterValueType detectValueType(final Object value) {
+ if (value instanceof Map) {
+ final Map<?, ?> valueAsMap = (Map<?, ?>) value;
+ if (valueAsMap.containsKey(ToscaFunctionType.CONCAT.getName())) {
+ return FilterValueType.CONCAT;
+ }
+ if (valueAsMap.containsKey(ToscaFunctionType.GET_ATTRIBUTE.getName())) {
+ return FilterValueType.GET_ATTRIBUTE;
+ }
+ if (valueAsMap.containsKey(ToscaFunctionType.GET_PROPERTY.getName())) {
+ return FilterValueType.GET_PROPERTY;
+ }
+ if (valueAsMap.containsKey(ToscaFunctionType.GET_INPUT.getName())) {
+ return FilterValueType.GET_INPUT;
+ }
+ }
+
+ return FilterValueType.STATIC;
+ }
+
+}