Publish trust level notification event
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / impl / events / avc / ncmptoclient / AvcEventPublisher.java
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/avc/ncmptoclient/AvcEventPublisher.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/avc/ncmptoclient/AvcEventPublisher.java
new file mode 100644 (file)
index 0000000..cba1f76
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2023 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.cps.ncmp.api.impl.events.avc.ncmptoclient;
+
+import io.cloudevents.CloudEvent;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import lombok.RequiredArgsConstructor;
+import org.onap.cps.ncmp.api.impl.events.EventsPublisher;
+import org.onap.cps.ncmp.api.impl.events.NcmpCloudEventBuilder;
+import org.onap.cps.ncmp.events.avc.ncmp_to_client.Avc;
+import org.onap.cps.ncmp.events.avc.ncmp_to_client.AvcEvent;
+import org.onap.cps.ncmp.events.avc.ncmp_to_client.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Service
+@RequiredArgsConstructor
+public class AvcEventPublisher {
+
+    private final EventsPublisher<CloudEvent> eventsPublisher;
+
+    @Value("${app.ncmp.avc.cm-events-topic}")
+    private String avcTopic;
+
+    /**
+     * Publish attribute value change event.
+     *
+     * @param eventKey id of the cmHandle being registered
+     */
+    public void publishAvcEvent(final String eventKey, final String attributeName,
+                                final String oldAttributeValue, final String newAttributeValue) {
+        final AvcEvent avcEvent = buildAvcEvent(attributeName, oldAttributeValue, newAttributeValue);
+
+        final Map<String, String> extensions = createAvcEventExtensions(eventKey);
+        final CloudEvent avcCloudEvent =
+            NcmpCloudEventBuilder.builder().type(AvcEvent.class.getTypeName())
+            .event(avcEvent).extensions(extensions).setCloudEvent().build();
+
+        eventsPublisher.publishCloudEvent(avcTopic, eventKey, avcCloudEvent);
+    }
+
+    private AvcEvent buildAvcEvent(final String attributeName,
+                                   final String oldAttributeValue,
+                                   final String newAttributeValue) {
+        final Avc avc = new Avc();
+        avc.setAttributeName(attributeName);
+        avc.setOldAttributeValue(oldAttributeValue);
+        avc.setNewAttributeValue(newAttributeValue);
+
+        final Data payload = new Data();
+        payload.setAttributeValueChange(Collections.singletonList(avc));
+        final AvcEvent avcEvent = new AvcEvent();
+        avcEvent.setData(payload);
+        return avcEvent;
+    }
+
+    private Map<String, String> createAvcEventExtensions(final String eventKey) {
+        final Map<String, String> extensions = new HashMap<>();
+        extensions.put("correlationid", eventKey);
+        return extensions;
+    }
+}