diff options
author | Ramesh Murugan Iyer <ramesh.murugan.iyer@est.tech> | 2024-06-04 08:57:28 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2024-06-04 08:57:28 +0000 |
commit | 74101c625cfaa5592c9219782f5919c02bd4bbb7 (patch) | |
tree | ddd36193848f4d748248ec836fe0c03ee8145f72 /models/src | |
parent | 66cfd4c9006b84ce1f3751da3b9dae2b4fff78e8 (diff) | |
parent | f2ed4877b7cfba7bcf224cbe9d7e739ec637a055 (diff) |
Merge "Remove Map in ACM-R for timeout Participant"
Diffstat (limited to 'models/src')
7 files changed, 136 insertions, 20 deletions
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java index c045c928b..5bdf4d312 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2021-2023 Nordix Foundation. + * Copyright (C) 2021-2024 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,6 +44,9 @@ public class Participant { private ParticipantState participantState = ParticipantState.ON_LINE; @NonNull + private String lastMsg; + + @NonNull private Map<UUID, ParticipantSupportedElementType> participantSupportedElementTypes = new HashMap<>(); /** @@ -54,6 +57,7 @@ public class Participant { public Participant(Participant otherParticipant) { this.participantState = otherParticipant.participantState; this.participantId = otherParticipant.participantId; + this.lastMsg = otherParticipant.lastMsg; this.participantSupportedElementTypes = PfUtils.mapMap(otherParticipant.getParticipantSupportedElementTypes(), ParticipantSupportedElementType::new); } diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java index e5eade3d7..cfde55767 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2021-2023 Nordix Foundation. + * Copyright (C) 2021-2024 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +32,7 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import java.io.Serializable; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -42,6 +43,7 @@ import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; import org.onap.policy.clamp.models.acm.concepts.Participant; import org.onap.policy.clamp.models.acm.concepts.ParticipantState; +import org.onap.policy.clamp.models.acm.utils.TimestampHelper; import org.onap.policy.common.parameters.annotations.NotNull; import org.onap.policy.common.parameters.annotations.Valid; import org.onap.policy.models.base.PfAuthorative; @@ -72,6 +74,10 @@ public class JpaParticipant extends Validated @Column private String description; + @Column + @NotNull + private Timestamp lastMsg; + @NotNull @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "participantId", referencedColumnName = "participantId", @@ -96,6 +102,7 @@ public class JpaParticipant extends Validated this.participantId = participantId; this.participantState = participantState; this.supportedElements = supportedElements; + this.lastMsg = TimestampHelper.nowTimestamp(); } /** @@ -108,6 +115,7 @@ public class JpaParticipant extends Validated this.description = copyConcept.description; this.participantId = copyConcept.participantId; this.supportedElements = copyConcept.supportedElements; + this.lastMsg = copyConcept.lastMsg; } /** @@ -125,6 +133,7 @@ public class JpaParticipant extends Validated participant.setParticipantState(participantState); participant.setParticipantId(UUID.fromString(participantId)); + participant.setLastMsg(this.lastMsg.toString()); participant.setParticipantSupportedElementTypes(new LinkedHashMap<>(this.supportedElements.size())); for (var element : this.supportedElements) { participant.getParticipantSupportedElementTypes() @@ -138,6 +147,7 @@ public class JpaParticipant extends Validated public void fromAuthorative(@NonNull final Participant participant) { this.setParticipantState(participant.getParticipantState()); this.participantId = participant.getParticipantId().toString(); + this.lastMsg = TimestampHelper.toTimestamp(participant.getLastMsg()); this.supportedElements = new ArrayList<>(participant.getParticipantSupportedElementTypes().size()); for (var elementEntry : participant.getParticipantSupportedElementTypes().entrySet()) { @@ -162,6 +172,11 @@ public class JpaParticipant extends Validated return result; } + result = lastMsg.compareTo(other.lastMsg); + if (result != 0) { + return result; + } + result = ObjectUtils.compare(participantState, other.participantState); if (result != 0) { return result; diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/utils/TimestampHelper.java b/models/src/main/java/org/onap/policy/clamp/models/acm/utils/TimestampHelper.java new file mode 100644 index 000000000..d430f7687 --- /dev/null +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/utils/TimestampHelper.java @@ -0,0 +1,50 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2024 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.clamp.models.acm.utils; + +import java.sql.Timestamp; +import java.time.Instant; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class TimestampHelper { + + public static String now() { + return Timestamp.from(Instant.now()).toString(); + } + + public static Timestamp nowTimestamp() { + return Timestamp.from(Instant.now()); + } + + public static Timestamp toTimestamp(String time) { + return Timestamp.valueOf(time); + } + + public static long nowEpochMilli() { + return Instant.now().toEpochMilli(); + } + + public static long toEpochMilli(String time) { + return Timestamp.valueOf(time).toInstant().toEpochMilli(); + } +} diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantInformationTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantInformationTest.java index fd06b3941..a843c8279 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantInformationTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantInformationTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2023 Nordix Foundation. + * Copyright (C) 2023-2024 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.HashMap; import java.util.UUID; import org.junit.jupiter.api.Test; +import org.onap.policy.clamp.models.acm.utils.TimestampHelper; class ParticipantInformationTest { @@ -33,6 +34,7 @@ class ParticipantInformationTest { var participant = new Participant(); participant.setParticipantId(UUID.randomUUID()); participant.setParticipantState(ParticipantState.ON_LINE); + participant.setLastMsg(TimestampHelper.now()); participant.setParticipantSupportedElementTypes(new HashMap<>()); var participantInfo1 = new ParticipantInformation(); participantInfo1.setParticipant(participant); diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java index 05ab495c5..e64a6893f 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2021-2023 Nordix Foundation. + * Copyright (C) 2021-2024 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,12 +27,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.sql.Timestamp; +import java.time.Instant; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.UUID; import org.junit.jupiter.api.Test; import org.onap.policy.clamp.models.acm.concepts.Participant; import org.onap.policy.clamp.models.acm.concepts.ParticipantState; +import org.onap.policy.clamp.models.acm.utils.TimestampHelper; /** * Test the {@link JpaParticipant} class. @@ -43,6 +46,9 @@ class JpaParticipantTest { @Test void testJpaParticipantConstructor() { + assertThatThrownBy(() -> new JpaParticipant((Participant) null)) + .hasMessageMatching("authorativeConcept is marked .*ull but is null"); + assertThatThrownBy(() -> new JpaParticipant((JpaParticipant) null)) .hasMessageMatching("copyConcept is marked .*ull but is null"); @@ -64,11 +70,8 @@ class JpaParticipantTest { @Test void testJpaParticipant() { - var testJpaParticipant = createJpaParticipantInstance(); - var participant = createParticipantInstance(); - - participant.setParticipantId(testJpaParticipant.toAuthorative().getParticipantId()); + var testJpaParticipant = new JpaParticipant(participant); assertEquals(participant, testJpaParticipant.toAuthorative()); @@ -89,7 +92,7 @@ class JpaParticipantTest { @Test void testJpaParticipantValidation() { - var testJpaParticipant = createJpaParticipantInstance(); + var testJpaParticipant = new JpaParticipant(createParticipantInstance()); assertThatThrownBy(() -> testJpaParticipant.validate(null)) .hasMessageMatching("fieldName is marked .*ull but is null"); @@ -99,7 +102,7 @@ class JpaParticipantTest { @Test void testJpaParticipantCompareTo() { - var testJpaParticipant = createJpaParticipantInstance(); + var testJpaParticipant = new JpaParticipant(createParticipantInstance()); var otherJpaParticipant = new JpaParticipant(testJpaParticipant); otherJpaParticipant.setParticipantId(testJpaParticipant.getParticipantId()); @@ -114,6 +117,12 @@ class JpaParticipantTest { assertEquals(0, testJpaParticipant.compareTo(otherJpaParticipant)); assertEquals(testJpaParticipant, new JpaParticipant(testJpaParticipant)); + testJpaParticipant.setLastMsg(Timestamp.from(Instant.EPOCH)); + assertNotEquals(0, testJpaParticipant.compareTo(otherJpaParticipant)); + testJpaParticipant.setLastMsg(otherJpaParticipant.getLastMsg()); + assertEquals(0, testJpaParticipant.compareTo(otherJpaParticipant)); + assertEquals(testJpaParticipant, new JpaParticipant(testJpaParticipant)); + var newJpaParticipant = new JpaParticipant(testJpaParticipant); newJpaParticipant.setParticipantId(testJpaParticipant.getParticipantId()); assertEquals(testJpaParticipant, newJpaParticipant); @@ -140,22 +149,14 @@ class JpaParticipantTest { var p2 = new JpaParticipant(); p2.setParticipantId(p0.getParticipantId()); + p2.setLastMsg(p0.getLastMsg()); assertEquals(p2, p0); } - private JpaParticipant createJpaParticipantInstance() { - var testParticipant = createParticipantInstance(); - var testJpaParticipant = new JpaParticipant(); - testParticipant.setParticipantId(UUID.fromString(testJpaParticipant.getParticipantId())); - testJpaParticipant.fromAuthorative(testParticipant); - testJpaParticipant.fromAuthorative(testParticipant); - - return testJpaParticipant; - } - private Participant createParticipantInstance() { var testParticipant = new Participant(); testParticipant.setParticipantId(UUID.randomUUID()); + testParticipant.setLastMsg(TimestampHelper.now()); testParticipant.setParticipantSupportedElementTypes(new LinkedHashMap<>()); return testParticipant; diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/utils/TimestampHelperTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/utils/TimestampHelperTest.java new file mode 100644 index 000000000..aaba0bcc8 --- /dev/null +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/utils/TimestampHelperTest.java @@ -0,0 +1,43 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2024 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.clamp.models.acm.utils; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class TimestampHelperTest { + + @Test + void testNow() { + assertThat(TimestampHelper.nowTimestamp()).isNotNull(); + assertThat(TimestampHelper.now()).isNotNull(); + assertThat(TimestampHelper.nowEpochMilli()).isNotNull(); + } + + @Test + void testToEpochMilli() { + var timeStr = TimestampHelper.now(); + var milli = TimestampHelper.toTimestamp(timeStr).toInstant().toEpochMilli(); + var result = TimestampHelper.toEpochMilli(timeStr); + assertThat(milli).isEqualTo(result); + } +} diff --git a/models/src/test/resources/providers/TestParticipant.json b/models/src/test/resources/providers/TestParticipant.json index 689c6a2b2..3f19baab4 100644 --- a/models/src/test/resources/providers/TestParticipant.json +++ b/models/src/test/resources/providers/TestParticipant.json @@ -8,6 +8,7 @@ "participantState": "ON_LINE", "description": "A dummy PMSH participant1", "participantId": "82fd8ef9-1d1e-4343-9b28-7f9564ee3de6", + "lastMsg": "2024-05-22 10:04:37.6020187", "participantSupportedElementTypes": { "68fe8c61-7629-4be7-99d8-18bc6a92d178": { "id": "68fe8c61-7629-4be7-99d8-18bc6a92d178", |