From 5d153a24a94a2a0d04bca8f0dbf0e0fc714827a7 Mon Sep 17 00:00:00 2001 From: liamfallon Date: Wed, 6 Oct 2021 18:45:12 +0100 Subject: 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 --- .../authorative/concepts/ToscaConstraint.java | 6 +- .../tosca/simple/concepts/JpaToscaConstraint.java | 6 +- .../simple/concepts/JpaToscaConstraintInRange.java | 99 ++++++++++++++++++++++ .../simple/concepts/JpaToscaConstraintTest.java | 26 +++++- 4 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintInRange.java 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 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 rangeValues; + + /** + * Constructor to set the range values. + * + * @param rangeValues the range values that are allowed + */ + public JpaToscaConstraintInRange(@NonNull final List 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) 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 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); } } -- cgit 1.2.3-korg