Support in_range TOSCA Constraint 09/124709/1
authorliamfallon <liam.fallon@est.tech>
Wed, 6 Oct 2021 17:45:12 +0000 (18:45 +0100)
committerliamfallon <liam.fallon@est.tech>
Wed, 6 Oct 2021 17:45:16 +0000 (18:45 +0100)
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>
models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java
models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java
models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintInRange.java [new file with mode: 0644]
models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintTest.java

index 33235a4..acfda49 100644 (file)
@@ -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;
 }
index f3dbeb0..307e693 100644 (file)
@@ -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 (file)
index 0000000..14e9db5
--- /dev/null
@@ -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);
+    }
+}
index 6ff2254..6c39737 100644 (file)
@@ -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);
     }
 }