aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliamfallon <liam.fallon@est.tech>2021-10-06 18:45:12 +0100
committerliamfallon <liam.fallon@est.tech>2021-10-06 18:45:16 +0100
commit5d153a24a94a2a0d04bca8f0dbf0e0fc714827a7 (patch)
treeb1a79b02cd6ad4ce6f2c74ab319f30e9bb3f2f8b
parent72f56e3460484a922f0bd19b9ef3eda868b34f6c (diff)
Support in_range TOSCA Constraint
The TOSCA in_range constraint is not supported, causing errors to be thrown in TOSCA control loop constraint edits. Issue-ID: POLICY-3695 Change-Id: I95dec4118ce8572c5b76d528878c6782856e0a53 Signed-off-by: liamfallon <liam.fallon@est.tech>
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java6
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java6
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintInRange.java99
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintTest.java26
4 files changed, 134 insertions, 3 deletions
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java
index 33235a45a..acfda4902 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java
@@ -3,7 +3,7 @@
* ONAP Policy Model
* ================================================================================
* Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -56,4 +56,8 @@ public class ToscaConstraint {
@ApiModelProperty(name = "less_or_equal")
@SerializedName("less_or_equal")
private String lessOrEqual;
+
+ @ApiModelProperty(name = "in_range")
+ @SerializedName("in_range")
+ private List<String> rangeValues;
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java
index f3dbeb030..307e6930c 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java
@@ -3,7 +3,7 @@
* ONAP Policy Model
* ================================================================================
* Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 Nordix Foundation.
+ * Modifications Copyright (C) 2019, 2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -61,6 +61,10 @@ public abstract class JpaToscaConstraint
return new JpaToscaConstraintValidValues(toscaConstraint);
}
+ if (toscaConstraint.getRangeValues() != null) {
+ return new JpaToscaConstraintInRange(toscaConstraint);
+ }
+
return (new JpaToscaConstraintLogical(toscaConstraint));
}
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintInRange.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintInRange.java
new file mode 100644
index 000000000..14e9db522
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintInRange.java
@@ -0,0 +1,99 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 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.onap.policy.models.tosca.simple.concepts;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.ElementCollection;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.ToString;
+import org.onap.policy.models.base.PfUtils;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint;
+
+/**
+ * This class represents in_range TOSCA constraint.
+ */
+@EqualsAndHashCode(callSuper = false)
+@ToString
+public class JpaToscaConstraintInRange extends JpaToscaConstraint {
+ private static final long serialVersionUID = -5060193250508635456L;
+
+ @ElementCollection
+ @Getter
+ private List<String> rangeValues;
+
+ /**
+ * Constructor to set the range values.
+ *
+ * @param rangeValues the range values that are allowed
+ */
+ public JpaToscaConstraintInRange(@NonNull final List<String> rangeValues) {
+ this.rangeValues = rangeValues;
+ }
+
+ /**
+ * Authorative constructor.
+ *
+ * @param authorativeConcept the authorative concept to copy from
+ */
+ public JpaToscaConstraintInRange(final ToscaConstraint authorativeConcept) {
+ /*
+ * The following will call invoke fromAuthorative() which will populate the class fields.
+ */
+ super(authorativeConcept);
+ }
+
+ @Override
+ public ToscaConstraint toAuthorative() {
+ var toscaConstraint = new ToscaConstraint();
+
+ toscaConstraint.setRangeValues(rangeValues);
+
+ return toscaConstraint;
+ }
+
+ @Override
+ public void fromAuthorative(final ToscaConstraint toscaConstraint) {
+ rangeValues = new ArrayList<>();
+ if (toscaConstraint.getRangeValues() != null) {
+ rangeValues.addAll(toscaConstraint.getRangeValues());
+ }
+ }
+
+ @Override
+ public int compareTo(JpaToscaConstraint otherConstraint) {
+ if (otherConstraint == null) {
+ return -1;
+ }
+ if (this == otherConstraint) {
+ return 0;
+ }
+ if (getClass() != otherConstraint.getClass()) {
+ return getClass().getName().compareTo(otherConstraint.getClass().getName());
+ }
+
+ final JpaToscaConstraintInRange other = (JpaToscaConstraintInRange) otherConstraint;
+
+ return PfUtils.compareObjects(rangeValues, other.rangeValues);
+ }
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintTest.java
index 6ff225425..6c39737f1 100644
--- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintTest.java
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintTest.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019-2020 Nordix Foundation.
+ * Copyright (C) 2019-2021 Nordix Foundation.
* Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -53,6 +53,9 @@ public class JpaToscaConstraintTest {
assertThatThrownBy(() -> new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, null))
.hasMessageMatching("compareTo is marked .*on.*ull but is null");
+ assertThatThrownBy(() -> new JpaToscaConstraintInRange((List<String>) null))
+ .hasMessageMatching("rangeValues is marked .*on.*ull but is null");
+
assertNotNull(new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, CONSTRAINT));
assertEquals(0, new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, "")
@@ -73,5 +76,26 @@ public class JpaToscaConstraintTest {
cvv1.fromAuthorative(new ToscaConstraint());
assertNotNull(cvv1.getValidValues());
+
+ List<String> rangeValues = new ArrayList<>();
+ rangeValues.add("hello");
+ rangeValues.add("goodbye");
+ JpaToscaConstraintInRange cir0 = new JpaToscaConstraintInRange(rangeValues);
+ assertEquals(-1, cir0.compareTo(null));
+ assertEquals(0, cir0.compareTo(cir0));
+ assertNotEquals(0, cir0.compareTo(new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, CONSTRAINT)));
+ JpaToscaConstraintInRange cir1 = new JpaToscaConstraintInRange(rangeValues);
+ assertEquals(0, cir0.compareTo(cir1));
+
+ ToscaConstraint tc0 = new ToscaConstraint();
+ tc0.setRangeValues(rangeValues);
+ JpaToscaConstraintInRange cir2 = new JpaToscaConstraintInRange(tc0);
+ assertEquals(0, cir0.compareTo(cir2));
+
+ cir1.fromAuthorative(new ToscaConstraint());
+ assertNotNull(cir1.getRangeValues());
+
+ ToscaConstraint tc1 = cir2.toAuthorative();
+ assertEquals(tc0, tc1);
}
}