From f174640d9aebe8b962de651d954243f434cc5eab Mon Sep 17 00:00:00 2001 From: mpriyank Date: Fri, 10 Jun 2022 12:09:20 +0100 Subject: NcmpEvent creation and Mapping - Mapping class to create header and event payload based on type of operation i.e CREATE, UPDATE and DELETE. - Service class to get CmHandle public properties, create event and delegate request to event publisher. - Modification in NcmpEvent schema json to mark field as String instead of URI - Test scenarios - UPCOMING: Call the service method from relevant code to actually publish the event. Issue-ID: CPS-1037 Change-Id: I6bb7de4b27e602c4d8ee6a5528a866e5f7e8799a Signed-off-by: mpriyank --- .../cps/ncmp/api/impl/event/NcmpEventsCreator.java | 90 ++++++++++++++++++++++ .../cps/ncmp/api/impl/event/NcmpEventsService.java | 65 ++++++++++++++++ 2 files changed, 155 insertions(+) create mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsCreator.java create mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsService.java (limited to 'cps-ncmp-service/src/main/java') diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsCreator.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsCreator.java new file mode 100644 index 0000000000..609306f08e --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsCreator.java @@ -0,0 +1,90 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2022 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.event; + +import static org.onap.ncmp.cmhandle.lcm.event.Event.CmhandleState.READY; +import static org.onap.ncmp.cmhandle.lcm.event.Event.Operation.DELETE; + +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.UUID; +import lombok.extern.slf4j.Slf4j; +import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle; +import org.onap.ncmp.cmhandle.lcm.event.Event; +import org.onap.ncmp.cmhandle.lcm.event.Event.Operation; +import org.onap.ncmp.cmhandle.lcm.event.NcmpEvent; +import org.springframework.stereotype.Component; + + +/** + * NcmpEventsCreator to create NcmpEvent based on relevant operation. + */ +@Slf4j +@Component +public class NcmpEventsCreator { + + + /** + * Populate NcmpEvent. + * + * @param cmHandleId Cm Handle Identifier + * @param operation Relevant Operation + * @param ncmpServiceCmHandle Ncmp CmHandle Data + * @return Populated NcmpEvent + */ + public NcmpEvent populateNcmpEvent(final String cmHandleId, final Operation operation, + final NcmpServiceCmHandle ncmpServiceCmHandle) { + return createNcmpEvent(cmHandleId, operation, ncmpServiceCmHandle); + } + + private NcmpEvent createNcmpEvent(final String cmHandleId, final Operation operation, + final NcmpServiceCmHandle ncmpServiceCmHandle) { + final NcmpEvent ncmpEvent = ncmpEventHeader(cmHandleId); + ncmpEvent.setEvent(ncmpEventPayload(cmHandleId, operation, ncmpServiceCmHandle)); + return ncmpEvent; + } + + private Event ncmpEventPayload(final String eventCorrelationId, final Operation operation, + final NcmpServiceCmHandle ncmpServiceCmHandle) { + final Event event = new Event(); + event.setOperation(operation); + event.setCmHandleId(eventCorrelationId); + + if (!DELETE.equals(operation)) { + event.setCmhandleState(READY); + event.setCmhandleProperties(List.of(ncmpServiceCmHandle.getPublicProperties())); + } + return event; + } + + private NcmpEvent ncmpEventHeader(final String eventCorrelationId) { + final NcmpEvent ncmpEvent = new NcmpEvent(); + ncmpEvent.setEventId(UUID.randomUUID().toString()); + ncmpEvent.setEventCorrelationId(eventCorrelationId); + ncmpEvent.setEventTime(ZonedDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"))); + ncmpEvent.setEventSource("org.onap.ncmp"); + ncmpEvent.setEventType("org.onap.ncmp.cmhandle-lcm-event"); + ncmpEvent.setEventSchema("org.onap.ncmp:cmhandle-lcm-event:v1"); + return ncmpEvent; + } + +} diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsService.java new file mode 100644 index 0000000000..045a67a104 --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsService.java @@ -0,0 +1,65 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2022 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.event; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.onap.cps.ncmp.api.impl.utils.YangDataConverter; +import org.onap.cps.ncmp.api.inventory.InventoryPersistence; +import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle; +import org.onap.ncmp.cmhandle.lcm.event.Event.Operation; +import org.onap.ncmp.cmhandle.lcm.event.NcmpEvent; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * NcmpEventService to map the event correctly and publish to the public topic. + */ + +@Slf4j +@Service +@RequiredArgsConstructor +public class NcmpEventsService { + + private final InventoryPersistence inventoryPersistence; + + private final NcmpEventsPublisher ncmpEventsPublisher; + + private final NcmpEventsCreator ncmpEventsCreator; + + @Value("${app.ncmp.events.topic:ncmp-events}") + private String topicName; + + /** + * Publish the NcmpEvent to the public topic. + * + * @param cmHandleId Cm Handle Id + * @param operation Relevant operation(CREATE,UPDATE or DELETE) + */ + public void publishNcmpEvent(final String cmHandleId, final Operation operation) { + + final NcmpServiceCmHandle ncmpServiceCmHandle = YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle( + inventoryPersistence.getYangModelCmHandle(cmHandleId)); + final NcmpEvent ncmpEvent = ncmpEventsCreator.populateNcmpEvent(cmHandleId, operation, ncmpServiceCmHandle); + ncmpEventsPublisher.publishEvent(topicName, cmHandleId, ncmpEvent); + + } +} -- cgit 1.2.3-korg